Regex Argentine postal code (CPA)
The modern Argentine postal code (CPA) is written 'C1426BMD': a province letter, the 4 digits of the old code, then 3 letters for the block face. The province letter is never I or O. A regexpattern.com regex nonetheless writes '[A-HJ-TP-Z]', whose J-T and P-Z ranges overlap: O passes. django-localflavor writes '\D{3}' instead of three letters, so 'C1425!!!' is accepted. And the GeoNames file makes everything optional: '1425ABC' and 'C1425' pass. Here's a strict pattern that also accepts the old 4-digit code, compared against those real attempts.
/^(?:[A-HJ-NP-Z][0-9]{4}[A-Z]{3}|[1-9][0-9]{3})$/passes 27/27 cases
Comparison of existing patterns
| Source | pattern | Score on the 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 | safe |
| 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 | safe |
| 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 | safe |
| 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 | safe |
Implementation
const re = new RegExp("^(?:[A-HJ-NP-Z][0-9]{4}[A-Z]{3}|[1-9][0-9]{3})$", "");
re.test(input);Limits
- 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.
Postal codes for other countries
- Australian postcode
- Brazilian postal code (CEP)
- Canadian postal code
- Czech postal code (PSČ)
- Dutch postal code
- French postal code
- German postal code (PLZ)
- Indian PIN code
- Irish Eircode
- Japanese postal code
- Polish postal code
- Portuguese postal code
- Spanish postal code
- Swedish postal code
- Swiss postal code (PLZ/NPA)
- UK postcode
- US ZIP code (ZIP and ZIP+4)
- All postal codes by country