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
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| Stack Overflow (93 votes) — seule à exclure les régions 05, 43 et 62, mais non ancrée avec \b : « D-10115 », « 10115 Berlin » et « 10115- » passent ; accepte aussi « 01000 », sous le plus bas PLZ attribué | \b((?:0[1-46-9]\d{3})|(?:[1-357-9]\d{4})|(?:[4][0-24-9]\d{3})|(?:[6][013-9]\d{3}))\b | 20 / 24 | sûr |
| Stack Overflow (réponse acceptée) — conçue pour extraire un PLZ d'un texte, pas pour valider : premier chiffre limité à 0, 1, 2, 4, 6, 7, 8, donc rejette Hanovre (30159), Cologne (50667), Erfurt (99084) ; non ancrée | \b[0124678][0-9]{4}\b(?!\s?[ \/-]\s?[0-9]+) | 12 / 24 | sûr |
| validator.js — 5 chiffres sans autre vérification : accepte « 00000 », « 05000 » et « 43000 », des régions sans code postal | ^\d{5}$ | 21 / 24 | sûr |
| Plugin Shopware commercial (page de la boutique) — la page présente comme « 5 chiffres consécutifs » une regex à sept groupes de chiffres, qui rejette tous les vrais codes postaux | ^[0-9][0-9][0-9][0-9][0-9][0-9][0-9]$ | 14 / 24 | sûr |
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
- 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 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