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.

6voto

Avinash Lad Points 61

J'ai ajouté un exemple en utilisant les solutions mentionnées ci-dessus sur jsfiddle. J'ai modifié le code un peu selon les besoins de mes clients. J'espère que cela aidera quelqu'un.

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

Voir l'exemple ici

6voto

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

Couvertures :

  • 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

5voto

MCattle Points 1178

En partant de la réponse de @Ravi, j'ai également appliqué quelques règles de validation pour l'indicatif NPA (zone) .

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 existe quelques autres restrictions, notamment les blocs réservés (N9X, 37X, 96X) et 555, mais je les ai laissés de côté, notamment parce que les blocs réservés peuvent être utilisés ultérieurement et que 555 est utile pour les tests.

C'est ce que j'ai trouvé :

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

Si vous souhaitez également faire correspondre des valeurs vides (si le champ n'est pas obligatoire), vous pouvez utiliser la méthode suivante :

(^((\+\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 d'entre eux proviennent de la réponse de @Francis) sont les suivants :

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 de regroupement pour extraire les groupes de chiffres, mais elle peut être modifiée pour les inclure.

5voto

FullStack Points 648

Je trouve cette expression régulière très utile pour moi pour un numéro de contact à 10 chiffres :

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

Référence : https://regex101.com/r/QeQewP/1

Explication :

enter image description here

4voto

sajid Points 47

Essayez ceci pour les utilisateurs pakistanais. Voici un modèle assez compact que j'ai créé.

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

Testé par rapport aux cas d'utilisation suivants.

+92 -345 -123 -4567
+92 333 123 4567
+92 300 123 4567
+92 321 123 -4567
+92 345 - 540 - 5883

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