Regex code postal polonais
La Poste polonaise précise dans ses règles d'adressage que le code s'écrit « XX-XXX », sans espace entre les chiffres, mais qu'on peut en laisser autour du tiret : « 00 - 901 » est donc tolérée. Aucune des trois tentatives réelles ne l'accepte. Le fichier GeoNames et une règle Google exigent un tiret collé ; un gist très repris accepte à la place un tiret, une espace ou rien du tout entre les deux groupes, donc « 00 901 » et « 00901 » passent, justement l'écriture que l'opérateur déconseille. Voici un motif qui suit la règle de l'opérateur, comparé à ces trois tentatives réelles.
/^[0-9]{2} ?- ?[0-9]{3}$/passe 23/23 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| GeoNames (countryInfo.txt) — tiret obligatoirement collé : rejette « 00 - 901 », que la Poste polonaise tolère explicitement | ^\d{2}-\d{3}$ | 20 / 23 | sûr |
| Gist jamesbar2 (repris par plusieurs projets) — séparateur tiret, espace ou absent : accepte « 00901 » et « 00 901 », l'écriture que la Poste polonaise déconseille | ^\d{2}[- ]{0,1}\d{3}$ | 18 / 23 | sûr |
| Google libaddressinput (données Chromium) — non ancrée : « Warszawa 00-901 » ou « 00-9010 » y passent si elle est utilisée telle quelle | \d{2}-\d{3} | 16 / 23 | sûr |
Implémentation
const re = new RegExp("^[0-9]{2} ?- ?[0-9]{3}$", "");
re.test(input);Limites
- Valide seulement la FORME (2 chiffres, tiret, 3 chiffres) : ne vérifie pas qu'un code figure dans l'Oficjalny Spis Pocztowych Numerów Adresowych, le registre officiel de la Poste polonaise, que je n'ai pas pu consulter. Un code peut donc être bien formé sans être attribué (« 00-000 », par exemple).
- Accepte les espaces autour du tiret (« 00 - 901 ») parce que la Poste polonaise les tolère, mais ne les normalise pas : retirez-les avant de stocker le code, sinon deux écritures du même code coexisteront dans votre base.
- Aucun intervalle ni premier chiffre interdit n'est documenté par l'opérateur : le motif n'en impose aucun, y compris le 0 initial de Varsovie. Une regex ne peut pas savoir quels codes existent réellement.
- Ne gère pas le préfixe « PL- » parfois ajouté dans l'adressage international : il n'est pas défini par l'opérateur dans le document consulté, il doit être retiré avant validation.
Codes postaux d’autres pays
- code postal allemand (PLZ)
- code postal argentin (CPA)
- code postal australien
- 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 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