Rexact
Cheatsheet

Regex numéro de téléphone sud-africain

L'ICASA précise que les numéros sud-africains ont 10 chiffres : le 0 de tronc suivi de 9 chiffres, avec +27 à la place du 0 depuis l'étranger. Les deux chiffres après le 0 désignent soit un indicatif de zone (011 Johannesburg, 021 Le Cap, 031 Durban, 012 Pretoria), soit un opérateur mobile (06x, 07x, 08x), soit un service (0800 gratuit, 086x, 087x, 09x). Les tentatives réelles relues acceptent n'importe quel préfixe : la regex de validator.js accepte « 000000000 », celle de sent.dm refuse seulement le 00 et celle de Drupal accepte des numéros commençant par 99. Voici un motif qui borne les deux premiers chiffres, comparé à ces tentatives.

/^(?:(?:\+|00)27[ -]?|0)(?:1[0-8]|2[1-378]|3[1-69]|4[0-9]|5[1346-8]|[67][0-9]|8[0-7]|9[0-2])(?:[ -]?[0-9]){7}$/
passe 34/34 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^(?:(?:\\+|00)27[ -]?|0)(?:1[0-8]|2[1-378]|3[1-69]|4[0-9]|5[1346-8]|[67][0-9]|8[0-7]|9[0-2])(?:[ -]?[0-9]){7}$", "");
re.test(input);

Limites

  • Valide seulement la FORME : ne vérifie pas que le numéro est attribué. Les préfixes de 2 chiffres suivent libphonenumber ; le texte des National Numbering Plan Regulations 2016 de l'ICASA, qui fait foi pour les blocs attribués, n'a pas été relu (seule la page « Numbering » l'a été).
  • La longueur de 10 chiffres avec le 0 est celle de l'ICASA ; les numéros de 14 chiffres (machine à machine) et les codes courts (moins de 10 chiffres) sont rejetés. Les préfixes 088, 089 et 91x-99x sont rejetés ; 09 n'est accepté que pour 090 à 092.
  • Après +27 ou 0027, le 0 de tronc ne doit pas être gardé : « +27 011… » est rejeté.
  • Une espace ou un tiret facultatifs sont acceptés entre deux chiffres quelconques ; les parenthèses, points et extensions sont rejetés.

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

Pages liées