2017-04-08 6 views
-1

J'ai besoin d'une regex pour vérifier le code postal français en PHP.code postal regex français

J'ai un regex comme:

/^(([\d]{2})|(2[abAB]))*(([\d]{2})|(2[abAB]))$/ capture 01 à 99 ou 2a ou 2b
ou
^[0-9]{5}$ capture 01000-99000
ou
^(0[1-9]|[1-8]\d|9[0-5])\d{3}$ capture 01000-95999

En réalité i besoin d'un combo de cette 3 regex,
Peut capturer 01 à 95, ou 01000 à 95000 ou 971 à 978 ou 984 à 989 ou 2A ou 2a ou 2B ou 2b

Une idée?
Merci beaucoup

+0

Si proche, mais 95000 est acceptée, mais pas 95999, et 2a/2A et 2B/2B ne fonctionne pas. – Buck

+0

Très parfait, merci merci: D – Buck

Répondre

2

Que diriez-vous:

(?:0[1-9]|[13-8][0-9]|2[ab1-9]|9[0-5])(?:[0-9]{3})?|9[78][1-9](?:[0-9]{2})? 

Jetez un oeil à: https://fr.wikipedia.org/wiki/Code_postal_en_France

+0

Seulement correspondre à 5 numéros de code postal, désolé:/ – Buck

+0

@Buck: «86000» existe, c'est la préfecture de Poitiers de Vienne. – Toto

+0

@Buck: voir ma modification, j'ai rendu le numéro de ville facultatif, donc il correspond au code postal du département ou de la ville. – Toto

1

Sur la base de votre cahier des charges, je pense:

^(?:(?:(?:0[1-9]|[1-8]\d|9[0-4])(?:\d{3})?)|97[1-8]|98[4-9]|‌​‌​2[abAB])$ 

répondra à vos besoins. Votre regex a eu des problèmes avec les plages et les espaces.

Démo: https://regex101.com/r/wFnEDj/2/