Expression régulière correspondant au 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 US qui supporte les formats suivants:

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

où # signifie n'importe quel nombre. Jusqu'à présent, j'ai trouvé les expressions suivantes

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

respectivement. Je ne suis pas certain que le dernier soit correct pour le contrôle en pointillé. Je veux aussi savoir s'il y a un moyen d'écrire une seule expression au lieu des 4 différentes qui répondent à la différents formats que j'ai mentionnés. Si oui, je ne suis pas sûr de savoir comment dois-je faire. Et aussi comment puis-je modifier l'expression/les expressions de sorte que je puisse également inclure une condition pour supporter l'indicatif régional comme composant optionnel. Quelque chose comme

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

où +1 est le code régional et il est facultatif.

69
demandé sur noobcoder 2013-05-22 22:21:42

17 réponses

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

correspond au suivant

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

Si vous ne voulez pas un match sur la non-NOUS utiliser numéros

^(\+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 l'appariement sur des nombres non formatés, il suffit de rendre la classe de caractère du séparateur optionnelle comme [\s.-]?

^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$
124
répondu Ravi Thapliyal 2015-01-12 15:13:54

il existe de nombreuses variantes possibles pour ce problème. Voici une expression régulière semblable à 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 beaucoup plus:

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

peu importe la façon dont le numéro de téléphone est entré, les groupes de saisie peuvent être utilisés pour ventiler le numéro de téléphone afin que vous puissiez le traiter dans votre code.

  • Groupe 1: Code du pays (ex: 1 ou 86)
  • Groupe 2: indicatif régional (ex: 800)
  • Groupe 3: échange (ex: 555)
  • Groupe 4: Numéro D'abonné (ex: 1234)
  • Groupe 5: 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.

76
répondu Francis Gagnon 2013-05-22 23:10:45

Ajouter un exemple utilisant les solutions mentionnées ci-dessus sur jsfiddle. J'ai un peu modifié le code selon les exigences de mes clients. Espérons que cela aide aussi à quelqu'un.

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

Voir Exemple Ici

6
répondu Avinash Lad 2016-10-28 11:35:18

En voici une assez compacte que j'ai créée.

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

Replace: +1 \(\) -

testé dans les 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
4
répondu Puneet Lamba 2014-11-25 16:26:51

les expressions pour 1, 3 et 4 sont assez similaires, donc vous pouvez utiliser:

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

notez que, selon la langue et la marque des regexes utilisés, vous pourriez avoir besoin de mettre au lieu de ou une telle correspondance pourrait ne pas être prise en charge du tout.

Je ne vois pas de bonne façon de combiner cela avec le format 2, à l'exception de l'évident ^(regex for 1,3,4|regex for 2)$ qui est laid, maladroit et rend difficile de sortir les parties des nombres.

quant à l'indicatif régional, vous pouvez ajouter (\+\d)? au début pour saisir un indicatif régional à un chiffre (désolé, Je ne connais pas le format de vos indicatifs régionaux).

2
répondu Vedran Šego 2013-05-22 18:36:41

et ça?

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

EDIT: j'ai oublié le (). EDIT 2: j'Ai les 3 premiers chiffres de la partie tort.

2
répondu crimson_penguin 2013-05-22 18:45:48

essayez ceci pour les utilisateurs pakistanais .En voici une assez compacte que j'ai créée.

((\+92)|0)[.\- ]?[0-9][.\- ]?[0-9][.\- ]?[0-9]

testé dans les cas d'utilisation suivants.

+92 -345 -123 -4567
+92 333 123 4567
+92 300 123 4567
+92 321 123 -4567
+92 345 - 540 - 5883
2
répondu sajid 2016-03-14 19:06:46

numéro de téléphone regex que j'utilise: /^[+]?(\d{1,2})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/

couvre:

  • 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
2
répondu Yevhen Kotliar 2018-08-31 20:00:38

peut-être le plus facile à comparer à plusieurs autres.

\(?\d+\)?[-.\s]?\d+[-.\s]?\d+

il correspond au suivant:

(555) 444-6789

555-444-6789

555.444.6789

555 444 6789

1
répondu MITHU 2016-11-19 12:50:31

ce code correspondra à un numéro de téléphone américain ou Canadien et permettra de s'assurer qu'il s'agit bien d'un indicatif régional et d'une circonscription valides:

^((\+1)?[\s-]?)?\(?[2-9]\d\d\)?[\s-]?[2-9]\d\d[\s-]?\d\d\d\d

Essai sur Regex101.com

1
répondu Shino 2018-03-30 14:56:56

patter Regex pour valider un numéro de téléphone régulier à 10 chiffres plus code international optionnel (1 à 3 chiffres) et numéro d'extension optionnel (n'importe quel nombre 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émo: 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
1
répondu bocanegra 2018-05-01 19:49:33
^(\+1)?\s?(\([1-9]\d{2}\)|[1-9]\d{2})(-|\s|.)\d{3}(-|\s|.)\d{4}
0
répondu amalgamate 2013-05-22 18:44:25

en commençant par la réponse de @Ravi, j'ai aussi appliqué quelques règles de validation pour L'indicatif régional .

en particulier:

  • , Il doit commencer par un 2 (ou plus)
  • il ne peut pas avoir" 11 " comme deuxième et troisième chiffres (N11).

il y a quelques autres restrictions, y compris les blocs réservés (N9X, 37X, 96X) et 555, mais je les ai laissées de côté, en particulier parce que les blocs réservés peuvent voir une utilisation future, et 555 est utile pour tester.

C'est ce que j'ai trouvé:

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

alternativement, si vous voulez aussi faire correspondre des valeurs Vierges (si le champ n'est pas requis), vous pouvez utiliser:

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

Mes cas de test pour les nombres valides (beaucoup de la réponse de @Francis) sont:

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

Mes cas de test invalides comprennent:

(003) 555-1212     // Area code starts with 0
(103) 555-1212     // Area code starts with 1
(911) 555-1212     // Area code ends with 11
180055512345       // Too many digits
1 800 5555 1234    // Prefix code too long
+1 800 555x1234    // Invalid delimiter
+867 800 555 1234  // Country code too long
1-800-555-1234p    // Invalid character
1 (800)  555-1234  // Too many spaces
800x555x1234       // Invalid delimiter
86 800 555 1212    // Non-NA country code doesn't have +

mon expression régulière ne comprend pas le groupement pour extraire les groupes numériques, mais elle peut être modifiée pour inclure ceux-ci.

0
répondu MCattle 2016-07-28 22:24:02

il s'agit d'une version plus complète qui concordera autant que je peux l'imaginer et qui vous donnera des correspondances de groupe pour le pays, la région, la première et la dernière.

(?<number>(\+?(?<country>(\d{1,3}))(\s|-|\.)?)?(\(?(?<region>(\d{3}))\)?(\s|-|\.)?)((?<first>(\d{3}))(\s|-|\.)?)((?<last>(\d{4}))))
0
répondu jake 2016-08-16 21:57:57

qu'en est-il des numéros multiples avec "+" et les séparer avec";"", " - " ou "" caractères?

0
répondu radeveloper 2017-11-06 07:16:37

j'ai fini avec

const regexBase = '(?:\+?(\d{1,3}))?[-. (]*(\d{3})?[-. )]*(\d{3})[-. ]*(\d{4,5})(?: *x(\d+))?'; const phoneRegex = new RegExp('\s*' + regexBase + '\s*', 'g');

c'était pour tenir compte de choses comme les nombres Hollandais, par exemple

+358 300 20200

0
répondu Kelly Milligan 2018-06-21 14:01:53

je trouve cette expression régulière la plus utile pour moi pour le numéro de contact à 10 chiffres:

^(?:(?:\+|0{0,2})91(\s*[\-]\s*)?|[0]?)?[789]\d{9}$

explication:

enter image description here

0
répondu FullStack 2018-09-05 13:06:23