Regex numéro de téléphone mexicain
Depuis le 3 août 2019, le Mexique compose 10 chiffres pour tous les numéros, fixes et mobiles : le préfixe 01 (longue distance) et les préfixes 044 et 045 (mobiles) ont été supprimés. Un numéro est donc une clé lada de 2 ou 3 chiffres (55 Mexico, 33 Guadalajara, 81 Monterrey, 222 Puebla) suivie de 8 ou 7 chiffres, avec +52 depuis l'étranger. Les tentatives réelles relues ne suivent pas cette règle : la regex de validator.js accepte « 01 » et « 1 » devant 10 ou 11 chiffres, celle de CakePHP accepte des numéros à 8 ou 13 chiffres et celle de sent.dm n'accepte que +52 collé. Voici un motif qui impose 10 chiffres et un premier chiffre de 2 à 9, comparé à ces tentatives.
/^(?:(?:\+|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}$/passe 35/35 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| validator.js (es-MX) — « (1|01)? » accepte les anciens préfixes : « 01 55 1234 5678 » (sans espaces : « 015512345678 ») passe ; « \d{10,11} » accepte un premier chiffre 0 ou 1 (« 0000000000 ») et 11 chiffres sans lien avec le préfixe ; aucun séparateur (« 55 1234 5678 » rejeté) | ^(\+?52)?(1|01)?\d{10,11}$ | 18 / 35 | sûr |
| sent.dm (guide du fournisseur, regex de base) — « +52 » obligatoire et collé : tout format national (« 55 1234 5678 », « 5512345678 ») et tout séparateur sont rejetés, y compris « +52 5512345678 » ; le premier chiffre 2-9 est correct | ^\+52[2-9]\d{9}$ | 18 / 35 | sûr |
| CakePHP localized (MxValidation::phone) — accepte des numéros de 8 ou 13 chiffres (« 12345678 », « 0155123456789 ») et un premier chiffre 0 ou 1 ; pas de +52 ; « (55)1234-5678 » passe, « (55) 1234-5678 » avec espace est rejeté | ^(\d{8}|\d{10}|\d{13}|((\d{2}[-,\s]){4}\d{2})|\(\d{3}\)\d{3}-\d{4}|\(\d{2}\)\d{4}-\d{4}|\d{3}[-,\s]\d{2}[-,\s]\d{8})$ | 15 / 35 | sûr |
Implémentation
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);Limites
- 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.
Numéros de téléphone d’autres pays
- numéro de téléphone allemand
- numéro de téléphone américain
- numéro de téléphone australien
- numéro de téléphone belge
- numéro de téléphone brésilien
- numéro de téléphone britannique
- numéro de téléphone canadien
- numéro de téléphone chinois
- numéro de téléphone espagnol
- numéro de téléphone français
- numéro de téléphone italien
- numéro de téléphone japonais
- numéro de téléphone néerlandais
- numéro de téléphone norvégien
- numéro de téléphone polonais
- numéro de téléphone sud-africain
- numéro de téléphone suédois
- numéro de téléphone suisse
- Tous les numéros de téléphone par pays