Rexact
Cheatsheet

Regex Australian postcode

An Australian postcode has 4 digits, but not just any: the allocated blocks are 0200-0299, 0800-0999 and 1000-9999. A Stack Overflow answer (2 votes) lists the ranges by hand and forgets 2915 to 2999 and 7500 to 7799, i.e. 385 codes from valid ranges (ACT, New South Wales, Tasmania). It also anchors only one alternative out of seven, so '20000' passes. A LeadsHook rule has the same anchoring flaw, and the most common one, '^\d{4}$', lets '0000' and '0100' through. Here's an anchored pattern following Australia Post's blocks, compared against those real attempts.

/^(?:0[289][0-9]{2}|[1-9][0-9]{3})$/
passes 28/28 cases

Comparison of existing patterns

Implementation

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

Limits

  • Valide seulement la FORME (4 chiffres dans un bloc attribué) : ne vérifie pas qu'un code est réellement utilisé. Les blocs d'Australia Post sont des plages attribuées, pas la liste des codes en service ; seul un fichier de correspondance code-localité confirme l'existence d'un code.
  • Wikipédia et Australia Post divergent d'une unité sur la limite entre l'ACT et la Nouvelle-Galles du Sud (2618 ou 2619) : sans conséquence ici, ce motif accepte tout 2600 à 2999, mais à connaître si vous distinguez les deux territoires.
  • Les codes 0200-0299 (ACT) et 0900-0999 sont acceptés, mais selon Wikipédia une partie de ces plages est réservée aux boîtes postales et aux gros clients : un code accepté par ce motif n'est pas forcément un code d'adresse de livraison.
  • Le zéro initial est significatif (« 0872 » est un vrai code) : stockez le code en texte, pas en entier, sinon il devient « 872 » et échoue à ce motif.

Postal codes for other countries

Related pages