Regex code postal argentin (CPA)
Le code postal argentin moderne (CPA) s'écrit « C1426BMD » : une lettre de province, les 4 chiffres de l'ancien code, puis 3 lettres désignant la face de l'îlot. La lettre de province n'est jamais I ni O. Une regex de regexpattern.com écrit pourtant « [A-HJ-TP-Z] », dont les plages J-T et P-Z se chevauchent : le O passe. django-localflavor écrit « \D{3} » au lieu de trois lettres, donc « C1425!!! » est accepté. Et le fichier GeoNames rend tout facultatif : « 1425ABC » et « C1425 » passent. Voici un motif strict qui accepte aussi l'ancien code à 4 chiffres, comparé à ces tentatives réelles.
/^(?:[A-HJ-NP-Z][0-9]{4}[A-Z]{3}|[1-9][0-9]{3})$/passe 27/27 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| regexpattern.com — « [A-HJ-TP-Z] » : les plages J-T et P-Z se chevauchent, la lettre O (jamais une province) passe ; la branche minuscule autorise i et o en première lettre, pas en fin ; rejette l'ancien code à 4 chiffres | ^([A-HJ-TP-Z]{1}\d{4}[A-Z]{3}|[a-z]{1}\d{4}[a-hj-tp-z]{3})$ | 23 / 27 | sûr |
| django-localflavor (ARPostalCodeField) — « \D{3} » accepte n'importe quels non-chiffres : « C1425!!! », « C1425--- » et « C1425ÁÉÍ » passent | ^\d{4}$|^[A-HJ-NP-Za-hj-np-z]\d{4}\D{3}$ | 25 / 27 | sûr |
| postcode-validator (npm) — les 3 lettres finales sont facultatives : « C1425 » (que le guide officiel marque « no recomendado ») passe ; rejette l'ancien code à 4 chiffres « 1425 » | ^[A-HJ-NP-Z]\d{4}([A-Z]{3})?$ | 24 / 27 | sûr |
| GeoNames (countryInfo.txt) — tout est facultatif : « 1425ABC », « C1425AB », et même « I1425ABC » ou « O1425ABC » passent | ^[A-Z]?\d{4}[A-Z]{0,3}$ | 22 / 27 | sûr |
Implémentation
const re = new RegExp("^(?:[A-HJ-NP-Z][0-9]{4}[A-Z]{3}|[1-9][0-9]{3})$", "");
re.test(input);Limites
- Valide seulement la FORME (une lettre de province hors I et O, 4 chiffres, 3 lettres ; ou l'ancien code à 4 chiffres) : ne vérifie pas qu'un code est réellement attribué par Correo Argentino, ni que la lettre de province correspond à la province du code à 4 chiffres.
- L'acceptation de l'ancien code à 4 chiffres (« 1426 ») est un choix de ce motif : le guide officiel le marque « no recomendado » et Correo Argentino dit qu'il n'est plus mis à jour depuis 1974. Si votre système exige un CPA, retirez la deuxième alternative.
- N'accepte que la forme que le guide officiel recommande : majuscules, sans espace ni tiret. « c1426bmd » et « C 1426 BMD », listés « no recomendado », sont rejetés : normalisez la saisie avant validation.
- Aucune source officielle consultée ne restreint les lettres I ou O dans les trois lettres finales : le motif les accepte. Seule la lettre de province, tirée de la liste ISO 3166-2:AR, les exclut.
Codes postaux d’autres pays
- code postal allemand (PLZ)
- 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