Regex numéro de téléphone italien
L'Italie n'a pas de préfixe de tronc : le 0 des numéros fixes fait partie du numéro et se compose aussi depuis l'étranger, donc +39 06 1234 5678 est correct et +39 6 1234 5678 ne l'est pas. Un fixe commence par 0 suivi d'un indicatif de 1 à 3 chiffres, un mobile par 3 et compte 9 ou 10 chiffres, les numéros verts par 800 ou 803. La regex mobile de validator.js refuse tout fixe, celle de Drupal accepte « 999 1234567 » et celle de CakePHP accepte la chaîne vide. Voici un motif qui sépare fixes, mobiles et numéros verts, comparé à ces tentatives.
/^(?:(?:\+|00)39 ?)?(?:0[1-9](?:[ ./-]?[0-9]){4,8}|3(?:[2-9](?:[ ./-]?[0-9]){7,8}|1(?:[ ./-]?[0-9]){8})|80(?:0(?:[ ./-]?[0-9]){6}|3(?:[ ./-]?[0-9]){3})|84(?:[08](?:[ ./-]?[0-9]){6}|[17](?:[ ./-]?[0-9]){3}))$/passe 33/33 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| validator.js (it-IT) — mobiles seulement : tout fixe refusé (« 06 1234 5678 ») ; 3xx où xx vaut « 00 » à « 19 » passe (« 300 1234567 ») ; « 39 320 1234567 » sans + passe ; « 320 123 4567 » (espace entre les groupes) rejeté | ^(\+?39)?\s?3\d{2} ?\d{6,7}$ | 16 / 33 | sûr |
| CakePHP localized (ItValidation::phone) — la chaîne vide passe, comme « 0 », « 123 » et n'importe quelle suite de chiffres avec au plus un tiret, une espace et une barre ; « +39 06 1234 5678 » rejeté | ^(\d*\-?\ ?\/?\d*)$ | 17 / 33 | vulnérable (000000000000000000000000000000000000000000000000000000000000…) |
| Drupal phone (7.x-1.x, phone.it.inc) — n'impose ni 0 ni 3 en tête : « 999 1234567 » et « 12 123456 » passent ; « 06 12345 » (fixe court) rejeté, comme « +39 06 1234 5678 » et « 320 123 4567 » (plusieurs espaces) | ^(\+39)?[ ]?([0-9]{2,3}(\/|-| )?[0-9]{6,7})$ | 20 / 33 | sûr |
Implémentation
const re = new RegExp("^(?:(?:\\+|00)39 ?)?(?:0[1-9](?:[ ./-]?[0-9]){4,8}|3(?:[2-9](?:[ ./-]?[0-9]){7,8}|1(?:[ ./-]?[0-9]){8})|80(?:0(?:[ ./-]?[0-9]){6}|3(?:[ ./-]?[0-9]){3})|84(?:[08](?:[ ./-]?[0-9]){6}|[17](?:[ ./-]?[0-9]){3}))$", "");
re.test(input);Limites
- Valide seulement la FORME : ne vérifie pas que le numéro est attribué ni que l'indicatif géographique existe : tout 0 suivi de 1 à 9 passe, la liste des indicatifs (01x à 09x, 2 à 4 chiffres) étant publiée par AGCOM.
- Le 0 des fixes doit être CONSERVÉ après +39 ou 0039 : « +39 6 1234 5678 » est rejeté. À l'inverse, un mobile ne prend jamais de 0 : « +39 0320… » est lu comme un fixe.
- Les longueurs suivent le plan notifié à l'UIT : fixe de 6 à 10 chiffres avec le 0 (l'exception à 11 chiffres, indicatif suivi d'un 1, n'est pas reprise), mobile de 9 ou 10 chiffres. Les préfixes 43x, 55x (VoIP), 70x, 89x (surtaxés) et les numéros personnels 178/199 ne sont pas acceptés.
- Une espace, un point, une barre oblique ou un tiret facultatifs sont acceptés entre deux chiffres quelconques ; les parenthèses et les extensions sont rejetées.
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 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 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