web-dev-qa-db-fra.com

Les expressions régulières autorisent une chaîne à ne contenir que les nombres de 0 à 9 et à limiter sa longueur à 45.

J'essaie de créer une regex pour qu'une chaîne ne contienne que 0-9 comme les caractères et doit avoir au moins 1 caractère et pas plus de 45. Ainsi, l'exemple serait 00303039 serait un match, et 039330a29 ne le ferait pas.

Jusqu'à présent, c'est ce que j'ai mais je ne suis pas sûr que ce soit correct

[0-9]{1,45} 

J'ai aussi essayé

^[0-9]{45}*$

mais cela ne semble pas fonctionner non plus. Je ne connais pas très bien regex, toute aide serait donc très utile. Merci!

50
NewToRegEx

Vous y êtes presque, tout ce dont vous avez besoin est de démarrer ancre (^) et ancre finale ($):

^[0-9]{1,45}$

\d est l'abréviation de la classe de caractères [0-9]. Vous pouvez l'utiliser comme:

^\d{1,45}$

Les ancres forcent le motif à correspondre à entier entrée, pas seulement à partie.


Votre regex [0-9]{1,45} cherche de 1 à 45 chiffres, donc chaîne comme foo1 également être associé car il contient 1.

^[0-9]{1,45} cherche de 1 à 45 chiffres mais ceux-ci doivent être à la position début de l'entrée. Ça correspond 123 mais aussi 123foo

[0-9]{1,45}$ cherche de 1 à 45 chiffres mais ces chiffres doivent être à la position end de l'entrée. Ça correspond 123 mais aussi foo123

^[0-9]{1,45}$ cherche de 1 à 45 chiffres mais ces chiffres doivent être tous les deux au début et à la fin de la saisie, ce devrait être effectivement = entier entrée.

143
codaddict

Le premier correspond à n’importe quel nombre de chiffres de votre chaîne (autorise également d’autres caractères, c’est-à-dire: "039330a29"). La seconde n'autorise que 45 chiffres (et pas moins). Alors prenez le meilleur des deux:

^\d{1,45}$

\d est identique à [0-9].

14
eumiro

Utilisez cette expression régulière si vous ne voulez pas commencer par zéro:

^[1-9]([0-9]{1,45}$)

Si cela ne vous dérange pas de commencer par zéro, utilisez:

^[0-9]{1,45}$
11
Chamly Idunil

codaddict a fourni la bonne réponse. En ce qui concerne ce que vous avez essayé, je vais expliquer pourquoi ils ne font pas la coupe:

  • [0-9]{1,45} est presque là, mais il correspond à une chaîne de 1 à 45 chiffres même si elle se trouve dans une autre chaîne plus longue contenant d'autres caractères. Vous avez donc besoin de ^ et $ pour le limiter à une correspondance exacte.

  • ^[0-9]{45}*$ correspond à une chaîne de 45 chiffres exactement, répétée 0 ou à un nombre quelconque de fois (*). Cela signifie que la longueur de la chaîne ne peut être que 0 ou un multiple de 45 (90, 135, 180 ...).

5
BoltClock

Vous avez probablement besoin d'une combinaison des deux tentatives:

^[0-9]{1,45}$
4
LukeH

^[0-9]{1,45}$ est correct.

2

Rails n'aime pas utiliser ^ et $ pour des raisons de sécurité, il est probablement préférable d'utiliser\A et\z pour définir le début et la fin de la chaîne.

2
NoDisplayName