Regex code postal japonais
Le manuel de la Poste japonaise écrit le code en 7 chiffres avec un tiret entre le 3e et le 4e (« 100-0001 »), en chiffres ASCII seulement. Sur une adresse, il est précédé du symbole 〒, que le manuel ne mentionne pas. Aucune des trois tentatives réelles ne gère les deux : validator.js exige le tiret et rejette « 1000001 », une règle Kuroco n'est pas ancrée donc « abc100-0001xyz » passe, et django-localflavor accepte les deux écritures mais rejette « 〒100-0001 ». Voici un motif ancré qui accepte le tiret et le 〒 comme facultatifs, comparé à ces trois tentatives réelles.
/^(?:〒 ?)?[0-9]{3}-?[0-9]{4}$/passe 26/26 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| validator.js — tiret obligatoire : rejette « 1000001 » ; rejette aussi « 〒100-0001 » | ^\d{3}\-\d{4}$ | 23 / 26 | sûr |
| Kuroco (FAQ officielle) — non ancrée : « abc100-0001xyz » et « 100-00011 » passent ; rejette « 1000001 » sans tiret | [0-9]{3}-[0-9]{4} | 21 / 26 | sûr |
| django-localflavor (JPPostalCodeField) — accepte 7 chiffres avec ou sans tiret, mais rejette « 〒100-0001 » ; en Python, « \d » accepte aussi les chiffres pleine chasse, que la Poste japonaise exclut | ^\d{3}-\d{4}$|^\d{7}$ | 24 / 26 | sûr |
Implémentation
const re = new RegExp("^(?:〒 ?)?[0-9]{3}-?[0-9]{4}$", "");
re.test(input);Limites
- Valide seulement la FORME (7 chiffres, tiret facultatif après le 3e) : ne vérifie pas qu'un code est réellement attribué par la Poste japonaise. « 000-0000 » passe, alors qu'il n'est très probablement attribué à aucune adresse.
- Le tiret facultatif et le préfixe « 〒 » sont des tolérances de saisie : le manuel de la Poste japonaise ne décrit que la forme avec tiret et ne mentionne pas « 〒 ». Si vous stockez le code, normalisez-le en « NNN-NNNN » sans 〒.
- Rejette les chiffres pleine chasse (« 100-0001 ») : le manuel dit « 当分の間、算用数字のみ » (chiffres arabes seulement, pour l'instant). C'est un choix de la Poste, pas une loi : convertissez-les en ASCII avant validation si votre public saisit en japonais.
- Un code à 7 chiffres ne dit rien de l'adresse : seul un fichier de correspondance code-adresse comme celui de la Poste japonaise confirme qu'un code existe et à quelle zone il correspond.
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 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