Rexact
Cheatsheet

Regex German postal code (PLZ)

A German postal code is 5 digits, but not just any: regions 00, 05, 43 and 62 have no assigned postal code. Almost every regex just reuses '\d{5}' and accepts '05000'. The accepted answer of one Stack Overflow question limits the first digit to 0, 1, 2, 4, 6, 7 or 8: it rejects Hanover (30159), Cologne (50667) and Erfurt (99084). And a commercial Shopware plugin page publishes, for '5 consecutive digits', a regex counting seven, which rejects every real code. Here's a pattern excluding the regions without codes, compared against those attempts.

/^(?!00|05|43|62)[0-9]{5}$/
passes 24/24 cases

Comparison of existing patterns

Implementation

const re = new RegExp("^(?!00|05|43|62)[0-9]{5}$", "");
re.test(input);

Limits

  • Valide seulement la FORME (5 chiffres, hors régions 00, 05, 43 et 62) : ne vérifie pas qu'un PLZ est réellement attribué par la Deutsche Post. Seuls environ 30 000 des 100 000 codes possibles sont utilisés, selon Wikipédia.
  • L'exclusion des régions 00, 05, 43 et 62 vient de la page Wikipédia allemande (source de dernier recours) : la page de presse de la Deutsche Post sur le PLZ à 5 chiffres n'a pas pu être lue en entier. À revérifier si votre cas est sensible, notamment pour la région 62, utilisée en interne par un centre de tri.
  • Le plus bas PLZ attribué est 01001 (Dresde) : « 01000 » passe pourtant ce motif, la regex ne peut pas énumérer les codes inutilisés d'une région active.
  • Le zéro initial est significatif (« 01219 » est un vrai code de Dresde) : stockez le PLZ en texte, pas en entier, sinon il devient « 1219 » et échoue à ce motif.

Postal codes for other countries

Related pages