2010-03-09 4 views
2

Excusez mon ignorance. Ma connaissance des expressions régulières est extrêmement limitée. J'ai l'expression régulière suivante sur un validateur d'expression régulière.Reg Ex - ne permet pas de zéro

^(\d{1,3},?(\d{3},?){0,2}\d{3}|\d{1,3})$ 

Actuellement, il permet zéro. Je dois mettre à jour afin qu'il ne permet pas une valeur de 0.

[Edit: Juste pour clarifier, je voudrais à exclure une valeur de zéro plutôt que d'un singulier « 0 » - merci]

Toute aide serait grandement appréciée.

Merci zaps

+0

il suffit d'ajouter '(0 $) 'juste après'^' – Amarghosh

+0

Ou changez la seconde moitié de l'expression régulière en' [1-9] \ d {0,2} 'Voir ma réponse mise à jour. – Amarghosh

Répondre

6

Vous cherchez peut-être quelque chose comme ceci:!

^[1-9]\d{0,2}(\d*|(,\d{3})*)$ 
+0

Remplacez '\ d {1,2}' par '\ d {0,2}' et c'est parfait. – Gumbo

+0

L'expression régulière d'origine autorise uniquement des valeurs allant jusqu'à 999 999 999 999. Celui-ci autorisera n'importe quel nombre> 0. Donc '^ [1-9] \ d {1,2} (\ d {0,9} | (, \ d {3}) {0,3}) $' pourrait être meilleur. Si cette exigence est toujours là. –

+0

@Gumbo: fait, merci. @Tim: Il y a plus de différences. Je devinais que ceux-ci étaient involontaires. – reinierpost

3

0 est autorisé par la deuxième partie de votre regex. Changer à:

^(\d{1,3},?(\d{3},?){0,2}\d{3}|[1-9]\d{0,2})$ 

Il veille à ce que le premier chiffre est non nul, lorsque le nombre total de chiffres sont inférieurs ou égaux à trois.

Le regex permet encore des modèles comme 000,000,000 et 000,123 Pour résoudre ce problème, vous pouvez modifier la première partie de l'expression rationnelle:

^([1-9]\d{0,2},?(\d{3},?){0,2}\d{3}|[1-9]\d{0,2})$ 

Ou réécrire comme

^[1-9]\d{0,2}(,?\d{3}){0,3}$ 

Cela permet encore 123,456789 et 123456,789. Changeons à:

^[1-9]\d{0,2}(?:(,\d{3}){0,3}|(\d{3}){0,3})$ 

Cela permettra 123,456,789 et 123456789 mais pas 123,456789 ou 123456,789

+0

Cela n'élimine-t-il pas également, par exemple, xy0 ou x0y? – Timo

+0

Mauvais résultats. L'intention est de ne pas autoriser les nombres avec les 0 principaux. Vous excluez trop. – reinierpost

+0

La question initiale demande seulement comment interdire "0" s, il ne fait aucune mention de "diriger" quoi que ce soit. –

Questions connexes