240 votes

Expression régulière pour faire correspondre un numéro de téléphone standard à 10 chiffres

Je veux écrire une expression régulière pour un numéro de téléphone standard de type américain qui prend en charge les formats suivants :

###-###-####
(###) ###-####
### ### ####
###.###.####

où # signifie un nombre quelconque. Jusqu'à présent, j'ai obtenu les expressions suivantes

^[1-9]\d{2}-\d{3}-\d{4}
^\(\d{3}\)\s\d{3}-\d{4}
^[1-9]\d{2}\s\d{3}\s\d{4}
^[1-9]\d{2}\.\d{3}\.\d{4}

respectivement. Je ne suis pas tout à fait sûr que le dernier soit correct pour le contrôle en pointillé. Je voudrais également savoir s'il existe un moyen d'écrire une seule expression au lieu des quatre différentes qui correspondent aux différents formats que j'ai mentionnés. Si c'est le cas, je ne sais pas comment m'y prendre. Je ne sais pas non plus comment modifier l'expression ou les expressions pour pouvoir inclure une condition permettant de prendre en charge le code régional en tant que composant facultatif. Quelque chose comme

+1 ### ### ####

où +1 est l'indicatif régional et il est facultatif.

385voto

Ravi Thapliyal Points 19305
^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$

Correspond aux éléments suivants

123-456-7890
(123) 456-7890
123 456 7890
123.456.7890
+91 (123) 456-7890

Si vous ne voulez pas de correspondance pour les numéros non américains, utilisez la méthode suivante

^(\+0?1\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$

Mise à jour :
Comme l'a remarqué l'utilisateur Simon Weaver ci-dessous, si vous êtes également intéressé par la correspondance sur des nombres non formatés, il suffit de rendre la classe de caractères séparateurs facultative comme suit [\s.-]?

^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$

236voto

Francis Gagnon Points 2765

Il existe de nombreuses variantes possibles pour ce problème. Voici une expression régulière similaire à une réponse que j'ai précédemment placée sur SO.

^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$

Il correspondrait aux exemples suivants et bien plus encore :

18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
800 555 1234x5678
8005551234 x5678
1    800    555-1234
1----800----555-1234

Quelle que soit la façon dont le numéro de téléphone est saisi, les groupes de capture peuvent être utilisés pour décomposer le numéro de téléphone afin que vous puissiez le traiter dans votre code.

  • Group1 : Code pays (ex : 1 ou 86)
  • Groupe2 : Indicatif régional (ex : 800)
  • Groupe3 : Échange (ex : 555)
  • Groupe4 : Numéro d'abonné (ex : 1234)
  • Group5 : Extension (ex : 5678)

Voici une ventilation de l'expression si vous êtes intéressé :

^\s*                #Line start, match any whitespaces at the beginning if any.
(?:\+?(\d{1,3}))?   #GROUP 1: The country code. Optional.
[-. (]*             #Allow certain non numeric characters that may appear between the Country Code and the Area Code.
(\d{3})             #GROUP 2: The Area Code. Required.
[-. )]*             #Allow certain non numeric characters that may appear between the Area Code and the Exchange number.
(\d{3})             #GROUP 3: The Exchange number. Required.
[-. ]*              #Allow certain non numeric characters that may appear between the Exchange number and the Subscriber number.
(\d{4})             #Group 4: The Subscriber Number. Required.
(?: *x(\d+))?       #Group 5: The Extension number. Optional.
\s*$                #Match any ending whitespaces if any and the end of string.

Pour rendre l'indicatif régional facultatif, il suffit d'ajouter un point d'interrogation après le ( \d {3}) pour l'indicatif régional.

48voto

stomy Points 851

^(\+\d{1,2}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$

Correspond à ces numéros de téléphone :

1-718-444-1122
718-444-1122
(718)-444-1122
17184441122
7184441122
718.444.1122
1718.444.1122
1-123-456-7890
1 123-456-7890
1 (123) 456-7890
1 123 456 7890
1.123.456.7890
+91 (123) 456-7890
18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
18001234567
1 800 123 4567
1-800-123-4567
+18001234567
+1 800 123 4567
+1 (800) 123 4567
1(800)1234567
+1800 1234567
1.8001234567
1.800.123.4567
+1 (800) 123-4567
18001234567
1 800 123 4567
+1 800 123-4567
+86 800 123 4567
1-800-123-4567
1 (800) 123-4567
(800)123-4567
(800) 123-4567
(800)1234567
800-123-4567
800.123.4567
1231231231
123-1231231
123123-1231
123-123 1231
123 123-1231
123-123-1231
(123)123-1231
(123)123 1231
(123) 123-1231
(123) 123 1231
+99 1234567890
+991234567890
(555) 444-6789
555-444-6789
555.444.6789
555 444 6789
18005551234
1 800 555 1234
+1 800 555-1234
+86 800 555 1234
1-800-555-1234
1.800.555.1234
+1.800.555.1234
1 (800) 555-1234
(800)555-1234
(800) 555-1234
(800)5551234
800-555-1234
800.555.1234
(003) 555-1212
(103) 555-1212
(911) 555-1212
18005551234
1 800 555 1234
+86 800-555-1234
1 (800) 555-1234

Ver regex101.com

24voto

bcngr Points 232

Modèle Regex pour valider un numéro de téléphone normal à 10 chiffres plus code international facultatif (1 à 3 chiffres) et numéro d'extension facultatif (un nombre quelconque de chiffres) :

/(\+\d{1,3}\s?)?((\(\d{3}\)\s?)|(\d{3})(\s|-?))(\d{3}(\s|-?))(\d{4})(\s?(([E|e]xt[:|.|]?)|x|X)(\s?\d+))?/g

Démonstration : https://www.regextester.com/103299

Entrées valides :

/* Full number */
+999 (999) 999-9999 Ext. 99999

/* Regular local phone number (XXX) XXX-XXXX */
1231231231
123-1231231
123123-1231
123-123 1231
123 123-1231
123-123-1231
(123)123-1231
(123)123 1231
(123) 123-1231
(123) 123 1231

/* International codes +XXX (XXX) XXX-XXXX */
+99 1234567890
+991234567890

/* Extensions (XXX) XXX-XXXX Ext. XXX... */
1234567890 Ext 1123123
1234567890Ext 1123123
1234567890 Ext1123123
1234567890Ext1123123

1234567890 Ext: 1123123
1234567890Ext: 1123123
1234567890 Ext:1123123
1234567890Ext:1123123

1234567890 Ext. 1123123
1234567890Ext. 1123123
1234567890 Ext.1123123
1234567890Ext.1123123

1234567890 ext 1123123
1234567890ext 1123123
1234567890 ext1123123
1234567890ext1123123

1234567890 ext: 1123123
1234567890ext: 1123123
1234567890 ext:1123123
1234567890ext:1123123

1234567890 X 1123123
1234567890X1123123
1234567890X 1123123
1234567890 X1123123
1234567890 x 1123123
1234567890x1123123
1234567890 x1123123
1234567890x 1123123

10voto

Puneet Lamba Points 143

En voici un assez compact que j'ai créé.

Search: \+?1?\s*\(?-*\.*(\d{3})\)?\.*-*\s*(\d{3})\.*-*\s*(\d{4})$

Replace: +1 \($1\) $2-$3

Testé par rapport aux cas d'utilisation suivants.

18001234567
1 800 123 4567
1-800-123-4567
+18001234567
+1 800 123 4567
+1 (800) 123 4567
1(800)1234567
+1800 1234567
1.8001234567
1.800.123.4567
1--800--123--4567
+1 (800) 123-4567

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X