2010-07-14 5 views
18

Quelqu'un peut-il m'aider à créer cette regex. J'en ai besoin pour vérifier si la chaîne est entièrement blanche (vide) ou si elle ne contient que des nombres entiers positifs. Si autre chose, il échoue. C'est ce que j'ai jusqu'ici.regex autorise uniquement les nombres ou les chaînes vides

/^\s*|[0-9][0-9]*/ 
+1

[0-9] [0-9] * est le même que [0-9] + – zvone

Répondre

32

Vous êtes à la recherche:

/^(\s*|\d+)$/ 

Si vous voulez un nombre positif sans zéro, utilisez [1-9][0-9]*

Si vous ne se soucient pas de autour espaces blancs du nombre, vous pouvez également essayer:

/^\s*\d*\s*$/ 

Notez que vous ne voulez pas autoriser la correspondance partielle, par exemple 123abc, vous avez donc besoin des ancrages de début et de fin: ^...$.
Votre expression régulière a une erreur commune: ^\s*|\d+$, par exemple, n'applique pas un match entier, comme c'est le même que (^\s*)|(\d+$), en lisant, les espaces au début, ou les chiffres à la fin.

+0

votre deuxième exemple ne correspondra aux espaces que s'il est au début ou à la fin ... il ne correspondrait pas à "1 2 3" – Cfreak

+0

@Cfreak - correct. Il dit * autour * :) – Kobi

+0

@Cfreak, pourquoi voudriez-vous correspondre '1 2 3' – CaffGeek

1

Vous pouvez it-

/^\d*$/ 

Pour correspondre avec le blanc espace-

/^[\s\d\s]*$/ 

+1

qui ne correspond pas aux espaces – Cfreak

3

Kobi a une bonne réponse, mais techniquement, vous ne devez pas le capturer (à moins que vous allez de faire quelque chose la sortie)

/^[\s\d]+$/ 

Ou si vous ne vous inquiétez pas si la chaîne est complètement vide (ie « »)Pour clarifier j'ai compris la question originale pour signifier que les espaces dans la chaîne devraient être ignorés.

+0

Le problème avec '/^[\ s \ d] * $ /' correspond à des choses comme '123 123' – CaffGeek

+1

À moins que je ne me trompe, le groupe dans la réponse de Kobi n'est pas pour capturer le nombre, plutôt que de garder les ancres ('^' et '$') loin de '|' –

1
^\d+([\.\,][0]{2})?$ 

J'ai trouvé cela a fonctionné pour moi. Laisser un nombre entier, mais seulement une décimale de .00

passe

  • 100,00
  • 101,00
  • 1000,00

ne réussit pas

  • 101,01
  • 1000,99

Essayez-le à http://regexpal.com/

1

Pour correspondre à un numéro ou une chaîne vide '' i.e l'utilisateur n'a pas entré d'entrée le faire

(^[0-9]+$|^$) 

Pour correspondre à un numéro, une chaîne vide, ou un espace blanc

(^[0-9]+$|^$|^\s$) 

Test cela sur regex101

Questions connexes