Rexact
Cheatsheet

Regex Canadian phone number

Canada shares the North American Numbering Plan (NANP) with the United States: +1, a 3-digit area code, a 3-digit exchange code starting with neither 0 nor 1, then 4 digits. What makes a number Canadian is the list of area codes (204, 416, 514, 604, 613...): jquery-validation's and validator.js's regexes accept any NANP-shaped area code, so '(212) 555-0123' (New York) passes as a Canadian number. The plan reserves 555-0100 to 555-0199 for fiction: '416 555 0123' is a good test example. Here's a pattern restricting area codes to the Canadian ones known to libphonenumber, compared against those attempts.

/^(?:(?:\+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}$/
passes 34/34 cases

Comparison of existing patterns

Implementation

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);

Limits

  • 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.

Phone numbers for other countries

Related pages