Rexact
Cheatsheet

Regex code postal espagnol

Un code postal espagnol a 5 chiffres, et les deux premiers désignent la province, de 01 à 52 (50 provinces, plus Ceuta en 51 et Melilla en 52), selon l'ordre du BOE de 1995. Sur un forum en 2006, l'auteur d'une question écrit « ^[00-52]{2}[0-9]{3}$ » en croyant exprimer « de 00 à 52 » : « [00-52] » est en fait l'ensemble des chiffres 0 à 5, donc Madrid (28013) et Barcelone (08019) sont rejetés. La première réponse « corrige » en acceptant la province 00, qui n'existe pas. Voici un motif qui borne vraiment le préfixe à 01-52, comparé à ces tentatives réelles.

/^(?:0[1-9]|[1-4][0-9]|5[0-2])[0-9]{3}$/
passe 22/22 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^(?:0[1-9]|[1-4][0-9]|5[0-2])[0-9]{3}$", "");
re.test(input);

Limites

  • Valide seulement la FORME (5 chiffres, province de 01 à 52) : ne vérifie pas qu'un code est réellement attribué par Correos. Un code comme « 52999 » passe, alors que le plus haut code des données GeoNames est 52080.
  • L'ordre du BOE de 1995 fixe la règle de la province (01 à 52, avec Ceuta 51 et Melilla 52), mais ne dit pas lui-même « 5 chiffres » : cette partie vient de Wikipédia (source de dernier recours), aucune page Correos n'ayant pu être consultée.
  • Le zéro initial est significatif (« 01001 », Vitoria-Gasteiz) : stockez le code en texte, pas en entier, sinon il devient « 1001 » et échoue à ce motif.
  • Rejette le préfixe « ES- » parfois écrit dans l'adressage international, ainsi que tout nom de localité accolé (« 28013 Madrid ») : séparez-les du code avant validation.

Codes postaux d’autres pays

Pages liées