Rexact
Cheatsheet

Regex code postal allemand (PLZ)

Un code postal allemand, c'est 5 chiffres — mais pas n'importe lesquels : les régions 00, 05, 43 et 62 n'ont pas de code postal attribué. Presque toutes les regex reprennent juste « \d{5} » et acceptent « 05000 ». La réponse acceptée d'une question Stack Overflow, elle, limite le premier chiffre à 0, 1, 2, 4, 6, 7 ou 8 : elle rejette Hanovre (30159), Cologne (50667) et Erfurt (99084). Et la page d'un plugin Shopware commercial publie, pour « 5 chiffres consécutifs », une regex qui en compte sept, donc qui rejette tous les vrais codes. Voici un motif qui exclut les régions sans code, comparé à ces tentatives.

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

Comparatif des patterns existants

Implémentation

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

Limites

  • 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.

Codes postaux d’autres pays

Pages liées