Je souhaite écrire une expression régulière pour un numéro de téléphone de type américain standard prenant en charge 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}\)\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 sais pas si le dernier est correct pour le chèque en pointillé. Je veux aussi savoir s'il est possible que je puisse écrire une seule expression au lieu des 4 différentes qui répondent aux différents formats que j'ai mentionnés. Si tel est le cas, je ne sais pas comment procéder. Et aussi comment modifier l'expression / expressions afin que je puisse également inclure une condition pour prendre en charge l'indicatif régional en tant que composant facultatif. Quelque chose comme
+1 ### ### ####
où +1 est l'indicatif régional et il est facultatif.
Réponses:
Correspond à ce qui suit
Si vous ne voulez pas de correspondance sur les numéros non américains, utilisez
Mise à jour:
comme l'a remarqué l'utilisateur Simon Weaver ci-dessous, si vous êtes également intéressé par la correspondance avec des nombres non formatés, rendez simplement la classe de caractères de séparation facultative comme
[\s.-]?
la source
?
là s'applique sur les parenthèses()
, pas sur les chiffres. Le regex associé complet est\(?\d{3}\)?
.\d{3}
spécifie qu'il doit y avoir trois chiffres entre le()
qui sont (rendus) facultatifs (par?
).?
après chaque[\s.-]
pour le rendre facultatif^(\+\d{1,2}\s)?((\(\d{3}\))|(\d{3}))[\s.-]\d{3}[\s.-]\d{4}$
. (Je viens de dupliquer le segment du RegEx qui couvre l'indicatif régional et autorise une variante avec parenthèses et une sans)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.
Cela correspondrait aux exemples suivants et bien plus encore:
Quelle que soit la façon dont le numéro de téléphone est entré, 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.
Voici une ventilation de l'expression si vous êtes intéressé:
Pour rendre l'indicatif régional facultatif, ajoutez simplement un point d'interrogation après le (\ d {3}) pour l'indicatif régional.
la source
\s
début et la fin ne sont pas nécessaires, car j'utilise pour la validation et le champ est déjà coupé.^(\+\d{1,2}\s?)?1?\-?\.?\s?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$
Correspond à ces numéros de téléphone:
Voir regex101.com
la source
En voici un assez compact que j'ai créé.
Testé par rapport aux cas d'utilisation suivants.
la source
Ajout d'un exemple utilisant les solutions mentionnées ci-dessus sur jsfiddle. J'ai modifié un peu le code selon les exigences de mes clients. J'espère que cela aide aussi quelqu'un.
Voir l'exemple ici
la source
essayez ceci pour les utilisateurs pakistanais. Voici un assez compact que j'ai créé.
Testé par rapport aux cas d'utilisation suivants.
la source
Numéro de téléphone regex que j'utilise:
/^[+]?(\d{1,2})?[\s.-]?\(?\d{3}\)?[\s.-]?\d{3}[\s.-]?\d{4}$/
Couvertures:
la source
Les expressions pour 1, 3 et 4 sont assez similaires, vous pouvez donc utiliser:
Notez que, selon la langue et la marque des expressions régulières utilisées, vous devrez peut-être mettre à la
\2
place de$2
ou une telle correspondance peut ne pas être prise en charge du tout.Je ne vois pas de bon moyen de combiner cela avec le format 2, mis à part l'évidence
^(regex for 1,3,4|regex for 2)$
qui est laide, maladroite et rend difficile la sortie des parties des nombres.Quant à l'indicatif régional, vous pouvez ajouter
(\+\d)?
au début pour capturer un indicatif régional à un chiffre (désolé, je ne connais pas le format de vos indicatifs régionaux).la source
Que dis-tu de ça?
EDIT: J'ai oublié celui (). EDIT 2: La première partie à 3 chiffres est erronée.
la source
.
dans une classe de caractères, cela[-\.\s]
devrait en fait être le cas[-.\s]
, car nous ne voulons pas faire correspondre une barre oblique inverse.[\.]
et les[.]
deux ne correspondent qu'à un point, tandis que[\\.]
correspond à la fois au point et à la barre oblique inverse. Merci pour votre remarque.En commençant par la réponse de @ Ravi, j'ai également appliqué certaines règles de validation pour le code NPA (régional) .
En particulier:
Il y a quelques autres restrictions, y compris les blocs réservés (N9X, 37X, 96X) et 555, mais je les ai laissés de côté, en particulier parce que les blocs réservés peuvent voir une utilisation future, et 555 est utile pour les tests.
Voici ce que j'ai proposé:
Sinon, si vous souhaitez également faire correspondre des valeurs vides (si le champ n'est pas obligatoire), vous pouvez utiliser:
Mes cas de test pour les nombres valides (beaucoup de la réponse de @Francis) sont:
Mes cas de test invalides incluent:
Mon expression régulière n'inclut pas le regroupement pour extraire les groupes de chiffres, mais elle peut être modifiée pour les inclure.
la source
Peut-être le plus facile à comparer à plusieurs autres.
Il correspond à ce qui suit:
la source
Ce code correspondra à un numéro de téléphone américain ou canadien et s'assurera également qu'il s'agit d'un indicatif régional et d'un échange valides:
Test sur Regex101.com
la source
Patter Regex pour valider un numéro de téléphone régulier à 10 chiffres plus un code international optionnel (1 à 3 chiffres) et un numéro d'extension optionnel (n'importe quel nombre de chiffres):
Démo: https://www.regextester.com/103299
Entrées valides:
la source
Je trouve cette expression régulière très utile pour moi pour un numéro de contact à 10 chiffres:
Référence : https://regex101.com/r/QeQewP/1
Explication:
la source
la source
Ceci est une version plus complète qui correspondra autant que je peux penser et vous donnera une correspondance de groupe pour le pays, la région, le premier et le dernier.
la source
qu'en est-il des nombres multiples avec "+" et séparez-les par ";" "," "-" ou "" caractères?
la source
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 permettre des choses comme les nombres néerlandais, par exemple
+358 300 20200
la source
Au-dessus de regex se trouve une légère modification de
@Francis Gagnon.
Objectif: détecter tout schéma possible, un utilisateur peut partager son numéro de téléphone américain
Version 1:
Version 2:
Ce qu'il contient: Les cas de test peuvent faire partie de la chaîne. Dans la première version, les cas de test doivent être un début de ligne pour travailler.
Si vous pouvez trouver un modèle qui peut échouer, veuillez faire un commentaire, je le corrigerai.
Cas de test: réussite
la source
Je lance simplement cette réponse car elle résout un de mes problèmes, elle est basée sur la réponse de @ stormy, mais comprend des codes de pays à 3 chiffres et, plus important encore, peut être utilisée n'importe où dans une chaîne, mais ne correspondra pas si ce n'est pas précédé d'un espace / début de la chaîne et se terminant par une limite de mot. Ceci est utile pour ne pas correspondre à des nombres aléatoires au milieu d'une URL ou quelque chose du genre
la source