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!
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.
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}$
où \d
est identique à [0-9]
.
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}$
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 ...).
Vous avez probablement besoin d'une combinaison des deux tentatives:
^[0-9]{1,45}$
^[0-9]{1,45}$
est correct.
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.