J'ai trouvé ce code sur un site Web et cela fonctionne parfaitement. Il valide que le numéro de téléphone est dans l'un de ces formats:
(123) 456-7890 ou 123-456-7890
Le problème est que mon client (je ne sais pas pourquoi, peut-être des trucs de client) veut ajouter un autre format, les dix nombres consécutifs, quelque chose comme ceci: 1234567890 .
J'utilise cette expression régulière,
/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/
Comment puis-je ajouter qu'il valide également l'autre format? Je ne suis pas doué pour les expressions régulières.
javascript
regex
Castro Roy
la source
la source
Réponses:
Tout d'abord, votre validateur de format n'est évidemment approprié que pour les numéros NANP (indicatif de pays +1). Votre application sera-t-elle utilisée par une personne possédant un numéro de téléphone de l'extérieur de l'Amérique du Nord? Si tel est le cas, vous ne voulez pas empêcher ces personnes d'entrer un numéro [international] parfaitement valide.
Deuxièmement, votre validation est incorrecte. Les numéros NANP prennent la forme
NXX NXX XXXX
oùN
est un chiffre 2-9 etX
est un chiffre 0-9. De plus, les indicatifs régionaux et les échanges peuvent ne pas prendre la formeN11
(se terminer par deux) pour éviter toute confusion avec des services spéciaux, sauf que les numéros d'un indicatif régional non géographique (800, 888, 877, 866, 855, 900) peuvent avoir unN11
échange.Donc, votre regex passera le numéro (123) 123 4566 même si ce n'est pas un numéro de téléphone valide. Vous pouvez résoudre ce problème en le remplaçant
\d{3}
par[2-9]{1}\d{2}
.Enfin, j'ai le sentiment que vous validez l'entrée utilisateur dans un navigateur Web. N'oubliez pas que la validation côté client n'est qu'une commodité que vous fournissez à l'utilisateur ; vous devez encore valider toutes les entrées (à nouveau) sur le serveur.
TL; DR n'utilise pas d'expression régulière pour valider des données complexes du monde réel telles que des numéros de téléphone ou des URL . Utilisez une bibliothèque spécialisée .
la source
Mon regex de choix est:
Formats valides:
(123) 456-7890
(123)456-7890
123-456-7890
123.456.7890
1234567890
+31636363634
075-63546725
la source
i
rend l'expression insensible à la casse etm
effectue des recherches sur plusieurs lignes^
au début et à$
la fin, elle peut également trouver des numéros de téléphone au milieu des chaînesSi vous recherchez 10 et seulement 10 chiffres, ignorez tout sauf les chiffres-
la source
return (value.match(/\d/g) || []).length == 10
ou beaucoup plus simple (mais tout aussi imparfait):return value.replace(/\D/g,'').length == 10
./\D/gi.test(value)
. Tout ce qui n'est pas un chiffre, y compris les espaces, les tirets, etc ...Ce que je ferais, c'est ignorer le format et valider le contenu numérique:
la source
C'est une option très lâche et je préfère la conserver ainsi, je l'utilise principalement dans les formulaires d'inscription où les utilisateurs doivent ajouter leur numéro de téléphone. Habituellement, les utilisateurs ont des problèmes avec les formulaires qui appliquent des règles de formatage strictes, je préfère que l'utilisateur remplisse le numéro et le formate à l'écran ou avant de l'enregistrer dans la base de données. http://regexr.com/3c53v
la source
+41 (79) 123 45 67
(Suisse):/^[+]?[\s./0-9]*[(]?[0-9]{1,4}[)]?[-\s./0-9]*$/g
Le REGEX suivant validera l'un de ces formats:
(123) 456-7890
123-456-7890
123.456.7890
1234567890
la source
.
ou sinon il correspondra à un caractère arbitraire, cassant votre regex.Je suggérerais d'utiliser quelque chose de plus clair (en particulier en pensant à qui devra maintenir le code) ... qu'en est-il:
où l'expression rationnelle est construite à partir d'un modèle clair? Ajouter un nouveau serait alors une évidence et peut-être même le client lui-même pourrait être en mesure de le faire dans une page "options".
la source
Où str pourrait être l'une de ces formarts: 555-555-5555 (555)555-5555 (555) 555-5555 555 555 5555 5555555555 1 555 555 5555
la source
Essayez celui-ci - il inclut également la validation pour les formats internationaux.
/^[+]?(1\-|1\s|1|\d{3}\-|\d{3}\s|)?((\(\d{3}\))|\d{3})(\-|\s)?(\d{3})(\-|\s)?(\d{4})$/g
Cette regex valide le format suivant:
la source
/^\+?1?\s*?\(?\d{3}(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$/
Bien que ce post soit un vieux mais je veux laisser ma contribution. ceux-ci sont acceptés: 5555555555 555-555-5555 (555)555-5555 1 (555) 555-5555 1 555 555 5555 1 555-555-5555 1 (555) 555-5555
ceux-ci ne sont pas acceptés:
555-5555 -> pour accepter cette utilisation:
^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$
5555555 -> pour accepter cette utilisation:
^\+?1?\s*?\(?(\d{3})?(?:\)|[-|\s])?\s*?\d{3}[-|\s]?\d{4}$
1 555) 555-5555 123 ** & !! asdf # 55555555 (6505552368) 2 (757) 622-7382 0 (757) 622-7382 -1 (757) 622-7382 2 757 622-7382 10 (757) 622 -7382 27576227382 (275) 76227382 2 (757) 6227382 2 (757) 622-7382 (555) 5 (55?) - 5555
c'est le code que j'ai utilisé:
la source
Cela fonctionnera:
Le
?
caractère signifie que le groupe précédent doit être mis en correspondance zéro ou une fois. Le groupe(-|\s)
correspondra à-
un|
caractère ou à un caractère. L'ajout?
après la deuxième occurrence de ce groupe dans votre regex vous permet de faire correspondre une séquence de 10 chiffres consécutifs.la source
vraiment simple
la source
Les réponses de tout le monde sont excellentes, mais en voici une qui, je pense, est un peu plus complète ...
Ceci est écrit pour l'utilisation de correspondance javascript d'un seul numéro sur une seule ligne:
Si vous voulez faire correspondre les limites des mots, remplacez simplement ^ et $ par \ b
J'apprécie toute suggestion, correction ou critique de cette solution. Pour autant que je sache, cela correspond au format NANP (pour les numéros américains - je n'ai pas validé d'autres pays d'Amérique du Nord lors de la création), évite les erreurs 911 (ne peut pas être dans l'indicatif régional ou l'indicatif régional), élimine seulement les 555 numéros qui sont réellement invalides (code régional de 555 suivi de 01xx où x = n'importe quel nombre).
la source
/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/
Le
?
caractère signifie que le groupe précédent doit être mis en correspondance zéro ou une fois. Le groupe(-|\s)
correspondra à-
un|
caractère ou à un caractère.la source
Je dois admettre que la validation des numéros de téléphone est une tâche difficile. En ce qui concerne ce problème spécifique, je changerais l'expression régulière de
à
comme le seul élément supplémentaire qui devient inutile est le dernier tiret / espace.
la source
Si vous utilisez une balise d'entrée, ce code vous aidera. J'écris ce code moi-même et je pense que c'est un très bon moyen de l'utiliser en entrée. mais vous pouvez le modifier en utilisant votre format. Cela aidera l'utilisateur à corriger son format sur la balise d'entrée.
la source
Je voulais juste ajouter une solution spécifiquement pour la sélection de numéros de téléphone non locaux (types 800 et 900).
la source
Ce reg ex convient aux numéros de téléphone internationaux et aux formats multiples de numéros de téléphone portable.
Voici l'expression régulière: / ^ (+ {1} \ d {2,3} \ s? [(] {1} \ d {1,3} [)] {1} \ s? \ D + | + \ d {2,3} \ s {1} \ d + | \ d +) {1} [\ s | -]? \ d + ([\ s | -]? \ d +) {1,2} $ /
Voici la fonction JavaScript
Cela valide les formats suivants:
+44 07988-825 465 (avec n'importe quelle combinaison de tirets à la place d'un espace sauf que seul un espace doit suivre le +44)
+44 (0) 7988-825 465 (avec n'importe quelle combinaison de traits d'union à la place d'espaces sauf qu'aucun trait d'union ne peut exister directement avant ou après le (0) et l'espace avant ou après le (0) n'a pas besoin d'exister)
123 456-789 0123 (avec n'importe quelle combinaison de tirets à la place des espaces)
123-123 123 (avec n'importe quelle combinaison de tirets à la place des espaces)
123 123456 (l'espace peut être remplacé par un tiret)
1234567890
Aucun espace double ou double trait d'union ne peut exister pour tous les formats.
la source
Valider le numéro de téléphone + retourner les données formatées
la source
essaye ça
formats valides
https://regex101.com/r/QXAhGV/1
la source
{1}
est inutile,{0,}
est mieux écrit*
. Pourquoi utiliser tous ces groupes de capture? Ils ralentissent le processus.Cette fonction a bien fonctionné pour nous:
la source
Expression régulière simple:
/\b\d{3}[-.]?\d{3}[-.]?\d{4}\b/g
Vérifiez le format, espérons que cela fonctionne:
444-555-1234
f: 246.555.8888
m: 1235554567
la source
Cela validera tout numéro de téléphone de format variable:
\\(?\d{3}\\)?
trouve 3 chiffres entre parenthèses ou non.([\-\s\.])?
trouve ou non l'un de ces caractères séparateurs\d{3}
trouve 3 chiffres\1
utilise le premier séparateur correspondant - cela garantit que les séparateurs sont identiques. Donc (000) 999-5555 ne validera pas ici car il y a un séparateur d'espace et de tiret, donc supprimez simplement le "\ 1" et remplacez-le par le sous-motif de séparateur (cela validera également les formats non standard). Cependant, vous devez quand même indiquer le format des entrées utilisateur.\d{4}
trouve 4 chiffresValide:
BTW c'est pour JavaScript donc pour doubler les échappements.
la source
Essayez cette fonction js. Renvoie vrai s'il correspond et faux s'il échoue Ref
la source
Ignorez tout sauf les chiffres.
Voici ce que j'utilise:
la source
essaye ça
formats valides:
la source