Rexact
Cheatsheet

Regex Mexican phone number

Since 3 August 2019, Mexico dials 10 digits for every number, landline or mobile: the 01 (long-distance) prefix and the 044 and 045 (mobile) prefixes were removed. A number is therefore a 2- or 3-digit lada code (55 Mexico City, 33 Guadalajara, 81 Monterrey, 222 Puebla) followed by 8 or 7 digits, with +52 from abroad. The real attempts I read do not follow that rule: validator.js's regex accepts '01' and '1' before 10 or 11 digits, CakePHP's accepts 8- or 13-digit numbers, and sent.dm's accepts only an unspaced +52. Here's a pattern enforcing 10 digits and a first digit from 2 to 9, compared against those attempts.

/^(?:(?:\+|00)52 ?(?:1 ?)?)?(?:[2-9][0-9][ -]?[0-9]{4}|[2-9][0-9]{2}[ -]?[0-9]{3}|\([2-9][0-9]\) ?[0-9]{4}|\([2-9][0-9]{2}\) ?[0-9]{3})[ -]?[0-9]{4}$/
passes 35/35 cases

Comparison of existing patterns

Implementation

const re = new RegExp("^(?:(?:\\+|00)52 ?(?:1 ?)?)?(?:[2-9][0-9][ -]?[0-9]{4}|[2-9][0-9]{2}[ -]?[0-9]{3}|\\([2-9][0-9]\\) ?[0-9]{4}|\\([2-9][0-9]{2}\\) ?[0-9]{3})[ -]?[0-9]{4}$", "");
re.test(input);

Limits

  • Valide seulement la FORME : ne vérifie pas que le numéro est attribué ni que la clé lada existe : tout premier chiffre de 2 à 9 passe. libphonenumber liste les clés réelles, que ce motif ne reprend pas.
  • Les anciens préfixes 01 (longue distance), 044 et 045 (mobiles), supprimés le 3 août 2019, sont rejetés. L'ancien format international « +52 1 55… » des mobiles est en revanche accepté par tolérance.
  • Fixes et mobiles ont désormais la même forme : le motif ne les distingue pas. Les numéros gratuits 800 et 888 ont aussi 10 chiffres et passent ; les numéros 900 et 300 également.
  • Séparateurs : espace ou tiret facultatifs en positions 2-4-4 ou 3-3-4 ; parenthèses autour de la clé lada acceptées si elles sont appariées. Les points et les extensions sont rejetés.

Phone numbers for other countries

Related pages