122 votes

Pourquoi la gamme [01-12] ne fonctionne-t-elle pas comme prévu ?

J'essaie d'utiliser le modèle de gamme [01-12] dans l'expression rationnelle pour faire correspondre les mm à deux chiffres, mais cela ne fonctionne pas comme prévu.

10 votes

Vous correspondez caractères no séquences de caractères . Fondamentalement, vous êtes en correspondance avec 0, 1 à 1 et 2 (c'est-à-dire 0, 1 et 2). Considérez ceci : [a-z0-9] ce qui correspond à toutes les lettres minuscules et à tous les chiffres, mais uniquement sous la forme d'un seul caractère.

0 votes

Pour info, j'ai créé un outil javascript qui crée une regex hautement optimisée à partir de deux entrées (min/max). github.com/jonschlinkert/to-regex-range

0 votes

0[1-9]|1[0-2] -> 0|1|2 -> []s dans une regex dénotent une classe de caractères. Si aucune plage n'est spécifiée, la regex utilise implicitement tous les caractères.

0voto

FallingBullets Points 1056

Comme le dit polygenelubricants, la vôtre chercherait 0|1-1|2 plutôt que ce que vous souhaitez, en raison du fait que les classes de caractères (les choses en []) correspondent à des caractères plutôt qu'à des chaînes de caractères.

3 votes

0|1-1|2 - cette notation est très trompeuse. Quelque chose comme 0|1|2 serait plus précis.

0voto

FalconTech Points 46

Ma solution pour conserver le format mm-aaaa est la suivante ^0*([1-9]|1[0-2])-(20[2-4][0-9])$

0 votes

Probablement mieux ^(0?[1-9]|1[0-2)-… (seulement un seul 0 de tête facultatif dans le cas où il n'y a pas de chiffre double)

0 votes

Vrai, simple ( ? ) est meilleur qu'illimité ( * ).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X