Rexact
Cheatsheet

Regex numéro de téléphone chinois

Un mobile chinois compte 11 chiffres et commence par 1 (13 à 19) ; un fixe est un indicatif de zone précédé de 0 (010 Pékin, 021 Shanghai, 0755 Shenzhen) puis 7 ou 8 chiffres, 10 ou 11 chiffres au total. Avec +86, le 0 de l'indicatif disparaît. Les numéros 400 et 800 ont 10 chiffres, sans zéro. Les tentatives réelles relues se trompent de façon différente : la regex de CakePHP accepte « 1 » suivi de 10 chiffres quelconques (« 10000000000 ») et exige un tiret entre l'indicatif et le numéro ; celle de Drupal accepte « +86 » avec n'importe quels 11 chiffres ; celle de validator.js ne couvre que les mobiles. Voici un motif qui sépare mobiles, fixes et 400/800, comparé à ces tentatives.

/^(?:(?:(?:\+|00)86[ -]?)?(?:1[3-9](?:[ -]?[0-9]){9}|[48]00(?:[ -]?[0-9]){7})|(?:(?:\+|00)86[ -]?|0)(?:(?:10|2[0-57-9])(?:[ -]?[0-9]){8}|[3-9][0-9]{2}(?:[ -]?[0-9]){7,8}))$/
passe 35/35 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^(?:(?:(?:\\+|00)86[ -]?)?(?:1[3-9](?:[ -]?[0-9]){9}|[48]00(?:[ -]?[0-9]){7})|(?:(?:\\+|00)86[ -]?|0)(?:(?:10|2[0-57-9])(?:[ -]?[0-9]){8}|[3-9][0-9]{2}(?:[ -]?[0-9]){7,8}))$", "");
re.test(input);

Limites

  • Valide seulement la FORME : ne vérifie pas que le numéro est attribué. Les préfixes mobiles 13 à 19 sont acceptés en bloc (libphonenumber en liste moins) ; les indicatifs de zone ne sont contrôlés que par leur premier chiffre (10, 2x sauf 26, 3xx à 9xx), pas contre la liste réelle.
  • Après +86 ou 0086, le 0 de l'indicatif de zone ne doit pas être gardé : « +86 0755… » est rejeté. Un fixe sans 0 ni +86 (« 755-12345678 ») est rejeté.
  • Les numéros 400 et 800 (10 chiffres) sont acceptés ; les numéros 95xxx, 96xxx, 1xxxx (courts), 16x (surtaxés) et 12345 ne le sont pas. Les extensions (« -1234 ») sont rejetées.
  • Le plan complet de la Chine n'a pas été relu ici (la page de l'UIT lue ne donne que les préfixes 190, 193 et 196 : mobile à 11 chiffres) ; les longueurs de fixes (7 ou 8 chiffres après l'indicatif) viennent de libphonenumber.

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

Pages liées