Rexact
Cheatsheet

Regex code postal canadien

L'auteur de la question de référence sur Stack Overflow avait un « problem child » : sa regex sans ancrage acceptait « A1A1B1C », un caractère de trop. Une réponse corrige l'ancrage mais oublie une règle réelle signalée en commentaire : Postes Canada n'utilise jamais les lettres D, F, I, O, Q, U dans un code postal, ni W ni Z en première position. Voici un motif qui respecte ces exclusions, comparé à ces deux tentatives et à une troisième qui, en corrigeant le problème du « W/Z » en tête, oublie à son tour de gérer l'espace ou le tiret usuels.

/^[ABCEGHJ-NPRSTVXY]\d[ABCEGHJ-NPRSTV-Z][ -]?\d[ABCEGHJ-NPRSTV-Z]\d$/i
passe 20/20 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^[ABCEGHJ-NPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ -]?\\d[ABCEGHJ-NPRSTV-Z]\\d$", "i");
re.test(input);

Limites

  • Valide uniquement la FORME générale (lettres autorisées, longueur) : ne vérifie pas que la combinaison lettre-chiffre de tête correspond réellement à une région de tri postal existante attribuée par Postes Canada.
  • N'impose pas d'espace unique à un emplacement fixe : « H2Z1B8 » (sans séparateur), « H2Z 1B8 » (espace) et « H2Z-1B8 » (tiret) sont tous acceptés, ce qui est correct pour la validation mais ne normalise pas l'affichage.
  • N'exclut pas certaines combinaisons régionales non attribuées à ce jour (par exemple les codes commençant par une lettre techniquement valide mais jamais utilisée dans les faits) : seules les exclusions universelles (D, F, I, O, Q, U partout ; W, Z en tête) sont vérifiées.
  • Le respect de la casse n'est pas imposé par la regex elle-même (elle accepte majuscules et minuscules mêlées) : une normalisation en majuscules est généralement effectuée séparément avant stockage ou affichage.

Codes postaux d’autres pays

Pages liées