Rexact
Cheatsheet

Regex code postal brésilien (CEP)

Le CEP brésilien tient en 8 chiffres, écrits « 00000-000 » avec un tiret après le cinquième. Mais personne ne tape toujours le tiret, et les tentatives réelles se partagent en deux camps qui se trompent chacun d'un côté : le fichier GeoNames, très utilisé, l'exige et rejette « 01001000 » ; une règle de Google libaddressinput le tolère mais ne l'ancre pas, donc « CEP 01001-000 » ou « abc01001000xyz » passent. Une bibliothèque Crystal doit même séparer deux regex, une avec tiret et une sans. Voici un motif ancré qui accepte les deux écritures, comparé à ces trois tentatives réelles.

/^[0-9]{5}-?[0-9]{3}$/
passe 22/22 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^[0-9]{5}-?[0-9]{3}$", "");
re.test(input);

Limites

  • Valide seulement la FORME (8 chiffres, tiret facultatif après le cinquième) : ne vérifie pas qu'un CEP est réellement attribué par les Correios. « 00000-000 » passe, alors qu'il n'est très probablement attribué à aucune adresse.
  • Le tiret facultatif est une convention des bibliothèques, pas une règle de la page officielle des Correios, qui décrit seulement le format « 00000-000 » : si votre système exige le tiret, supprimez le « ? » du motif.
  • Les trois derniers chiffres ont une signification (000-899 localités ou rues, 900-959 codes spéciaux, 970-989 et 999 unités des Correios, selon la page officielle) que ce motif n'encode pas : il ne distingue pas un CEP de rue d'un CEP d'agence.
  • Un CEP de deux régions différentes ne se distingue pas par la forme seule : seul un service d'annuaire comme ViaCEP, ou le fichier des Correios, associe un code à une adresse réelle.

Codes postaux d’autres pays

Pages liées