Rexact
Cheatsheet

Regex numéro de téléphone canadien

Le Canada partage le plan de numérotation nord-américain (NANP) avec les États-Unis : +1, un indicatif régional de 3 chiffres, un code d'échange de 3 chiffres qui ne commence ni par 0 ni par 1, puis 4 chiffres. Ce qui distingue un numéro canadien est la liste des indicatifs régionaux (204, 416, 514, 604, 613…) : les regex de jquery-validation et de validator.js acceptent n'importe quel indicatif de format NANP, donc « (212) 555-0123 » (New York) passe comme numéro canadien. Le plan réserve 555-0100 à 555-0199 aux œuvres de fiction : « 416 555 0123 » est un bon exemple de test. Voici un motif qui limite les indicatifs aux indicatifs canadiens connus de libphonenumber, comparé à ces tentatives.

/^(?:(?:\+1|1)[ .-]?)?(?:(?:2(?:04|[23]6|[48]9|5[07]|[67]3)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42)|8(?:00|33|44|55|66|77|88))|\((?:2(?:04|[23]6|[48]9|5[07]|[67]3)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42)|8(?:00|33|44|55|66|77|88))\))[ .-]?[2-9][0-9]{2}[ .-]?[0-9]{4}$/
passe 34/34 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^(?:(?:\\+1|1)[ .-]?)?(?:(?:2(?:04|[23]6|[48]9|5[07]|[67]3)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42)|8(?:00|33|44|55|66|77|88))|\\((?:2(?:04|[23]6|[48]9|5[07]|[67]3)|3(?:06|43|54|6[578]|82)|4(?:03|1[68]|[26]8|3[178]|50|74)|5(?:06|1[49]|48|79|8[147])|6(?:04|[18]3|39|47|72)|7(?:0[59]|42|53|78|8[02])|8(?:[06]7|19|25|7[39])|9(?:0[25]|42)|8(?:00|33|44|55|66|77|88))\\))[ .-]?[2-9][0-9]{2}[ .-]?[0-9]{4}$", "");
re.test(input);

Limites

  • Valide seulement la FORME : ne vérifie pas que le numéro est attribué. Seuls l'indicatif régional (liste de libphonenumber, qui peut prendre du retard sur les nouveaux indicatifs et superpositions) et le premier chiffre 2-9 du code d'échange sont contrôlés ; les numéros 555-01xx sont des numéros fictifs, mais le motif les accepte comme n'importe quel autre.
  • Un indicatif américain voisin (« 212 », « 305 ») est rejeté ; en revanche des indicatifs non canadiens attribués après la version de libphonenumber utilisée seraient rejetés à tort, et l'inverse pour de futurs indicatifs canadiens.
  • Le préfixe +1 ou 1 est facultatif. Séparateur facultatif : espace, point ou tiret entre les trois blocs ; « 416-555.0123 » (mélangé) passe. Les extensions (« ext 5 », « x5 ») sont rejetées : le motif de telephone-us les accepte.
  • Les numéros gratuits (800, 833, 844, 855, 866, 877, 888) sont acceptés, sans distinction du pays : ils sont communs aux États-Unis et au Canada.

Numéros de téléphone d’autres pays

Pages liées