2017-03-02 4 views
0

quoi de neuf?Quantificateur Regex avec numéro de groupe de capture

J'essaie de faire fonctionner une regex, mais je suis confrontée à un comportement «étrange» (?).

je besoin d'une regex qui valide les suivantes:

  • Seuls les numéros (sans espaces blancs du tout)
  • Commence par 10 ou 11
  • doit être de 12 caractères

Après avoir travaillé pendant un certain temps sur ce que je suis coincé avec ceci:

^(10|11)[0-9]{10}$ 

Il semble fonctionner comme vous le souhaitez, mais je ne suis pas satisfait car il est trompeur à première vue. Doit être 12 caractères maximum mais il valide max 10 + les caractères 'commence par'.

Quelqu'un at-il une meilleure solution ou se soucie-t-il d'expliquer pourquoi cela se produit? .

Merci à l'avance (:

+0

Je ne comprends pas quel est le problème si cela fonctionne comme vous le souhaitez. .. vous n'aimez pas comment la chaîne regex regarde ..? – Oneiros

+0

Ce n'est pas que je ne l'aime pas, mais avoir une validation de 10 caractères où il valide réellement 12, est trompeur lors de la maintenance du code. – Ambrosi

+1

Si vous avez un problème _eye_, utilisez ce '^ (? = (10 | 11)) [0-9] {12} $' – sln

Répondre

1

Son ne fonctionne pas comme on le souhaite
{10} signifie exactement 10 chiffres dans votre cas
Vous pouvez utiliser {0,10} qui Matches between 0 and 10 times, as many times as possible, giving back as needed

Quant à la partie trompeuse - son subjective. , si le numéro doit commencer par 10 ou 11, il doit donc comporter 2 chiffres et vous ne pouvez pas dépasser 10 chiffres

+0

Merci pour votre réponse! Désolé l'erreur sur les caractères max, qui est mon mauvais: P En fait, il devrait être « doit être de 12 caractères » Ainsi, ce comportement pour le quantificateur est normal? – Ambrosi

+0

Oui, je crois que vous vouliez voir quelque chose comme "commence avec 10 ou 11 et 12 chiffres" et ne pas voir "12" dans la regex vous rend mal à l'aise, si c'est le cas, vous pouvez utiliser le @sln proposé – dimamah

0

Je pense que ce dont vous avez besoin est le llowing:

^(10|11)[0-9]{0,10}$ 

cela signifie qu'il commence par 10 ou 11 et peut avoir entre 2 et 12 caractères

Try it here