Rexact
Cheatsheet

Regex code postal britannique (UK postcode)

Le gouvernement britannique publie lui-même une regex officielle pour valider ses codes postaux — sauf qu'elle contient au moins trois bugs réels, documentés en détail dans une réponse à 269 votes sur Stack Overflow : une faute de frappe (« [AZa-z] » au lieu de « [A-Za-z] »), un groupe optionnel placé sur le mauvais élément, et surtout une alternation mal parenthésée qui laisse passer des chaînes comme « GIR 0AAfoo ». Deux autres tentatives réelles, chacune sur un fil différent, oublient chacune un point distinct : l'une la lettre optionnelle avant l'espace, l'autre les zones à une seule lettre (comme « N1 7TE » ou « M1 3HZ »). Voici un motif corrigé, comparé à ces trois tentatives réelles.

/^([A-Za-z]{1,2}\d[A-Za-z\d]? ?\d[A-Za-z]{2}|[Gg][Ii][Rr] ?0[Aa]{2})$/
passe 21/21 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^([A-Za-z]{1,2}\\d[A-Za-z\\d]? ?\\d[A-Za-z]{2}|[Gg][Ii][Rr] ?0[Aa]{2})$", "");
re.test(input);

Limites

  • Valide uniquement la FORME générale (lettres/chiffres, longueur) : ne vérifie pas que la zone postale (les 1 ou 2 premières lettres, comme « SE » ou « M ») correspond à une zone réellement attribuée par Royal Mail.
  • Ne couvre pas les codes postaux des territoires britanniques d'outre-mer (Gibraltar, îles Falkland, Sainte-Hélène...), qui suivent des formats spéciaux distincts, ni le cas historique « SAN TA1 » (Santa Claus, Royaume-Uni).
  • N'impose pas d'espace unique à un emplacement fixe : « SE50EG » (sans espace) et « SE5 0EG » (avec espace) sont tous deux acceptés, ce qui est correct pour la validation mais ne normalise pas l'affichage.
  • Le respect de la casse n'est pas imposé par la regex elle-même (elle accepte majuscules et minuscules mêlées) : une normalisation en majuscules est généralement effectuée séparément avant stockage ou affichage.

Codes postaux d’autres pays

Pages liées