Comment puis-je former une regex pour valider une plage de 1 à 1000, où le nombre 001 est identique que 1, 0245 est identique à 245. La plupart des solutions que j'ai visées ont permis la vérification de la plage mais ne permettaient pas de commencer le nombre avec 0. Le problème est de ne pas autoriser 0,00 000 000, mais permettez au nombre de commencer avec ou sans 0. P>
Edit: il devrait permettre 1 01,001 et aucun nombre dépassant 4 chiffres. P>
5 Réponses :
Il y a quelques façons de faire cela. Ma première pensée est une chose comme ceci: explication: p> Le 0 * code> consomme des zéros de premier plan. Après cela, vous recherchez 1000 ou un numéro de 1 à 3 chiffres qui ne commencent pas avec zéro. Le [1-9] code> nécessite qu'au moins un chiffre non zéro est présent et que le \ d {0,2} code> permet de passer à deux chiffres après cela (des chiffres se terminant en zéro sont toujours autorisés). P> P>
C'est probablement la réponse correcte la plus simple. La question initiale n'était pas claire sur la question de savoir si Regexp est vérifié contre des chaînes numériques individuelles ou utilisée pour extraire des nombres assortis de chaînes, mais cela ressemble à celui de l'ancien.
Ça fonctionne bien. Comment un numéro comme 203 passe-t-il avec 0 au milieu?
@Rnet: A 0 code> au milieu est assorti par \ d code>
Cette solution permet également 0001000, il ne devrait-il pas y avoir de 4 chiffres maximum?
@ Système - Si j'ai compris l'exigence, il n'a pas d'importance. S'ils le font, ^ (? = \ D {1,4} $) code> au début doit s'en occuper.
@Justin qui était ma compréhension et la raison pour laquelle j'ai ajouté aussi une réponse après avoir lu la vôtre ;-)
Bonne réponse. +1 (et merci Justin pour avoir souligné la faille dans ma tentative de nuit boiteux.)
@Ridgerunner - Pas de problème, je vous ai vu autour de vous et je sais que vous avez Skillz Regex. :)
myregexp.com p>
regexp: 0001000 correspondances
0001001 ne correspond pas
0..1000 matchs
tout ce qui précède 1000 ne correspond pas p> ^ (0 +)? (? = \ d {1,4}) ([1-9] | [1-9] [0-9] | [1-9] [0 -9] [0-9] | 1000) $ code> p>
Juste fyi, votre [1-9] | [1-9] [0-9] | [1-9] [0-9] [0-9] [0-9] code> est équivalent à [ 1-9] \ d {0,2} code>. Pourrait aider à raccourcir cela.
Le (? = \ D {1,4}) code> semble également être redondant si je ne me trompe pas, et (0 +)? Code> est le même que 0 * code>.
^ (1000 | 0? [1-9] [0-9] [0-9] | 0 {0,2} [1-9] [0-9] | 0 {0,3 } [1-9]) $ code>,
ou équivalent
^ (1000 | 0? [1-9] \ D {2} | 0 {0,2} [1-9] \ D | 0 {0,3} [1-9]) $ code >
fera le tour: tous de 0001 à 1000 avec ou sans hauteur de 0 d'autres mais pas plus de 4 chiffres: P>
Quoi de cela ici:
^(1000|(?=\d{1,4})0*[1-9]\d{0,2})$
10000 00001
Je crois que cela correspond toujours à 0, 00 000 ou 0000.
Oui, mais ce sont des valeurs toujours valides.
Je ne le pense pas. La question décrit une gamme de 1 à 1000, et j'ai lu la deuxième phrase qui souhaite interdire 0, 00 et 000. BTW, votre (0 \ D {1,3}) | (\ d { 1,3}) code> pourrait être réécrit comme 0? \ D {1,3} code>.
Tu as raison! Je manque-lisez la dernière déclaration. J'avais lu comme autorisé 0, 00, etc.
J'ai le sentiment que cela ressort davantage de votre implémentation spécifique de RegexP que sur les expressions régulières en général: il suffit de mettre
0 {0-1} code> devant le reste de votre expression ...?Pourquoi n'utilisez-vous pas des installations linguistiques normales?
@Tchrist J'ai à valider une valeur et le framework de validation fournit une validation sous forme de validation de la plage de nombres (qui est contiguë), validation de caractères .... Validation de regex. Je dois vérifier si la valeur réside dans des segments de plage spécifiques qui ne sont pas contigus.
Je me sens comme si la réponse acceptée n'est pas la réponse que vous recherchez. La réponse acceptée permettra 00000 et permettra 00000000000000000000000000 et 00009999. Mon impression est que vous souhaitez interdire b> Celles-ci.
@Wesley - J'ai abordé ce point dans les commentaires sur ma réponse. Ma compréhension était que les zéros principaux ne devraient pas compter vers la limite à 4 chiffres; Le point est de correspondre à des chiffres compris entre 1 et 1000 et 001000 satisfait toujours que. Cependant, comme je l'ai mentionné, insérez
(? = \ D {1,4} $) code> après le^ code> dans ma réponse le limitera à 4 caractères.@Wesley - également, veuillez noter que 00000 et autres modèles tout zéro ne correspondent pas à cause du
[1-9] code>.@Justin Morgan: Désolé, j'ai mal interprété la question. Tu as raison.