Rexact
Cheatsheet

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

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

Pages liées