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
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| validator.js (en-ZA) — « \d{9} » après 0 ou +27 : « 0000000000 » et « 0199999999 » passent, « 27111234567 » (sans +) aussi ; aucun séparateur (« 011 123 4567 » rejeté) | ^(\+?27|0)\d{9}$ | 18 / 34 | sûr |
| sent.dm (guide du fournisseur, formats international et national) — « [1-9]\d{8} » : seul 00 est refusé, « 019… », « 020… », « 088… » passent ; aucun séparateur (« 082 123 4567 » rejeté) | ^0[1-9]\d{8}$|^\+27[1-9]\d{8}$ | 18 / 34 | sûr |
| Drupal phone (7.x-1.x, phone.za.inc) — accepte « 27 » sans + devant et n'importe quel préfixe de 2 chiffres (« 099 123 4567 », « 000 123 4567 ») ; « 0027 11 123 4567 » est rejeté ; tolère des espaces multiples après l'indicatif pays | ^((?:\+27|27)|0)[ ]*((\d{2})(-| )?(\d{3})(-| )?(\d{4})|(\d{2})( |-)(\d{7}))$ | 28 / 34 | sûr |
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
- 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 mexicain
- 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 suédois
- numéro de téléphone suisse
- Tous les numéros de téléphone par pays