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.

3voto

MITHU Points 291

Peut-être le plus facile comparé à plusieurs autres.

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

Il correspond aux éléments suivants :

(555) 444-6789

555-444-6789

555.444.6789

555 444 6789

2voto

Vedran Šego Points 1237

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

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

Notez que, selon la langue et la marque des regex utilisés, vous devrez peut-être mettre \2 au lieu de $2 ou cette correspondance peut ne pas être prise en charge du tout.

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

Quant à l'indicatif régional, vous pouvez ajouter (\+\d)? au début pour capturer un code régional à un chiffre (désolé, je ne connais pas le format de vos codes régionaux).

2voto

Shino Points 21

Ce code correspondra à un numéro de téléphone américain ou canadien, et s'assurera également qu'il s'agit d'un code régional et d'un échange valides :

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

Test sur Regex101.com

2voto

Harvey Kadyanji Points 200

C'est ma Regex qui a fonctionné sur les numéros américains dans le défi des numéros de téléphone du FreeCodeCamp :

/^\d{3}(-|\s)\d{3}(-|\s)\d{4}$|^\d{10}$|^1\s\d{3}(-|\s)\d{3}(-|\s)\d{4}$|^(1\s?)?\(\d{3}\)(\s|\-)?\d{3}\-\d{4}$/

Matches :

555-555-5555

(555)555-5555

(555) 555-5555

555 555 5555

5555555555

1 555 555 5555 etc

1voto

crimson_penguin Points 1909

Que pensez-vous de ça ?

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

EDIT : J'ai oublié le (). EDIT 2 : Je me suis trompé dans la première partie de 3 chiffres.

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