Rexact
Cheatsheet

Regex UK postcode

The UK government itself publishes an official regex to validate its own postcodes - except it contains at least three real bugs, documented in detail in a 269-vote Stack Overflow answer: a typo ("[AZa-z]" instead of "[A-Za-z]"), an optional group placed on the wrong element, and above all a badly parenthesized alternation that lets strings like "GIR 0AAfoo" through. Two other real attempts, each from a different thread, each miss a distinct point: one the optional letter before the space, the other single-letter areas (like "N1 7TE" or "M1 3HZ"). Here's a fixed pattern, compared against these three real attempts.

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

Comparison of existing patterns

Implementation

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);

Limits

  • 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.

Postal codes for other countries

Related pages