PHP regex chiffres longueur de seulement 5 ou 9
J'ai besoin d'une expression régulière pour la chaîne de validation. La chaîne peut être vide, peut avoir 5 chiffres, et peut avoir des 9 chiffres. D'autres situations est pas valide. Je suis en utilisant les regex:
/\d{5}|\d{9}/
Mais ça ne fonctionne pas.
/^(\d{5})(\d{4})?)$/
? En supposant que les chiffres sont la seule chose dans la chaîne, cela correspond à 5 chiffres, éventuellement suivie par 4 autres.- Ce n'est même pas syntaxiquement valide.
- Cuirious, ce serait la chaîne vide, dites-vous?
- De meilleures façons de faire le code postal de validation...
- double possible de PHP: expressions régulières Simples pour correspondre à la longueur?
Vous devez vous connecter pour publier un commentaire.
Comme Marc B a dit dans les commentaires, je voudrais utiliser cette expression régulière:
Cela correspond exactement à cinq chiffres qui pourrait être suivie par une autre de quatre chiffres (donc neuf chiffres au total) ou aucun caractère à tous (note de la
?
quantificateur autour de l'chiffres expression qui en fait le groupe en option).L'avantage de ce modèle en face de l'autre mentionné les modèles avec des alternances, c'est que ce n'exigent pas de retour en arrière si l'assortiment de cinq chiffres échoué.
utiliser des ancres et "?" pour permettre à la chaîne vide
Vous avez oublié les ancres
^
et$
. Sans eux, la chaîne de chiffres correspondent à ceux de n'importe où dans la chaîne, et pas seulement au début ou à la fin. En outre, vous ne recouvre pas la chaîne vide en cas."ne fonctionne pas" n'est pas beaucoup d'aide. mais ne serait-il pas quelque chose comme cela?
(Peu rouillé sur les regexp, mais je suis en train de faire est de démarrer, puis 5 OU 9 chiffres OU rien, puis à la fin)
La réponse quant à pourquoi il doesent travail est avec style Perl regex est alternances sont classés de gauche à droite.
Le modifier:
/\d{9}|\d{5}/
(Quoique, ce ne sera pas vous dire autre chose à propos de 6 à 8 et 10-l'infinià moins que son ancrée avec des assertions ou quelque chose d'autre.)
/^(\d{5}|\d{9}|)$/