Regex Polish postal code
Poczta Polska states in its addressing rules that the code is written 'XX-XXX', with no space between digits, but that spaces may surround the hyphen: '00 - 901' is therefore tolerated. None of the three real attempts accepts it. The GeoNames file and a Google rule require a tight hyphen; a widely reused gist instead accepts a hyphen, a space or nothing between the two groups, so '00 901' and '00901' pass, which is exactly the spelling the operator discourages. Here's a pattern following the operator's rule, compared against those three real attempts.
/^[0-9]{2} ?- ?[0-9]{3}$/passes 23/23 cases
Comparison of existing patterns
| Source | pattern | Score on the corpus | ReDoS |
|---|---|---|---|
| GeoNames (countryInfo.txt) — tiret obligatoirement collé : rejette « 00 - 901 », que la Poste polonaise tolère explicitement | ^\d{2}-\d{3}$ | 20 / 23 | safe |
| 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 | safe |
| 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 | safe |
Implementation
const re = new RegExp("^[0-9]{2} ?- ?[0-9]{3}$", "");
re.test(input);Limits
- 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.
Postal codes for other countries
- Argentine postal code (CPA)
- Australian postcode
- Brazilian postal code (CEP)
- Canadian postal code
- Czech postal code (PSČ)
- Dutch postal code
- French postal code
- German postal code (PLZ)
- Indian PIN code
- Irish Eircode
- Japanese postal code
- Portuguese postal code
- Spanish postal code
- Swedish postal code
- Swiss postal code (PLZ/NPA)
- UK postcode
- US ZIP code (ZIP and ZIP+4)
- All postal codes by country