Rexact
Cheatsheet

Regex Italian phone number

Italy has no trunk prefix: the 0 of landline numbers is part of the number and is also dialled from abroad, so +39 06 1234 5678 is correct and +39 6 1234 5678 is not. A landline starts with 0 followed by an area code of 1 to 3 digits, a mobile starts with 3 and has 9 or 10 digits, toll-free numbers start with 800 or 803. validator.js's mobile regex refuses every landline, Drupal's accepts '999 1234567', and CakePHP's accepts the empty string. Here's a pattern separating landlines, mobiles and toll-free numbers, compared against those attempts.

/^(?:(?:\+|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}))$/
passes 33/33 cases

Comparison of existing patterns

Implementation

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);

Limits

  • 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.

Phone numbers for other countries

Related pages