Regex code postal australien
Un code postal australien a 4 chiffres, mais pas n'importe lesquels : les blocs attribués sont 0200-0299, 0800-0999 et 1000-9999. Une réponse Stack Overflow (2 votes) énumère les plages à la main et oublie 2915 à 2999 et 7500 à 7799, soit 385 codes de plages valides (ACT, Nouvelle-Galles du Sud, Tasmanie). Elle n'ancre en plus qu'une alternative sur sept, donc « 20000 » passe. Une règle LeadsHook a le même défaut d'ancrage, et la plus répandue, « ^\d{4}$ », laisse passer « 0000 » et « 0100 ». Voici un motif ancré qui suit les blocs d'Australia Post, comparé à ces tentatives réelles.
/^(?:0[289][0-9]{2}|[1-9][0-9]{3})$/passe 28/28 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| Stack Overflow (2 votes) — plages énumérées à la main : oublie 2915-2999 et 7500-7799 (385 codes de plages attribuées) ; « ^ » et « $ » ne lient qu'une alternative chacun, « 20000 » passe | ^(0[289][0-9]{2})|([1345689][0-9]{3})|(2[0-8][0-9]{2})|(290[0-9])|(291[0-4])|(7[0-4][0-9]{2})|(7[8-9][0-9]{2})$ | 21 / 28 | sûr |
| LeadsHook (article d'aide) — mêmes ancres mal liées : « 12345 », « -2000 » et « +2000 » passent ; seule logique de plage : le premier chiffre | ^(0[289][0-9]{2})|([123456789][0-9]{3})$ | 26 / 28 | sûr |
| django-localflavor (AUPostCodeField) — 4 chiffres sans plage : « 0000 », « 0100 », « 0199 », « 0300 » et « 0799 », sans bloc attribué, passent | ^\d{4}$ | 23 / 28 | sûr |
| LimeSurvey (manuel) — pas d'ancre de fin : « 20000 », « 12345 » et « 2000 » suivi d'une espace passent | ^[0-9]{4} | 21 / 28 | sûr |
Implémentation
const re = new RegExp("^(?:0[289][0-9]{2}|[1-9][0-9]{3})$", "");
re.test(input);Limites
- 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.
Codes postaux d’autres pays
- code postal allemand (PLZ)
- code postal argentin (CPA)
- code postal brésilien (CEP)
- code postal britannique (UK postcode)
- code postal canadien
- code postal espagnol
- code postal français
- code postal japonais
- code postal néerlandais
- code postal polonais
- code postal portugais
- code postal suédois
- code postal suisse (NPA)
- code postal tchèque (PSČ)
- Eircode irlandais
- PIN code indien
- ZIP code américain (ZIP et ZIP+4)
- Tous les codes postaux par pays