J'utilise ce modèle pour vérifier la validation d'un numéro de téléphone
^[0-9\-\+]{9,15}$
Cela fonctionne pour 0771234567
et +0771234567
, Mais je veux qu'il fonctionne pour 077-1234567
et +077-1234567
et + 077-1-23-45-67 et + 077-123-45-6-7
Que devrais-je changer dans le motif?
Veuillez vous référer à ce SO message
exemple d'expression régulière dans jQuery pour les numéros de téléphone
/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
sont pris en charge
Cette solution valide réellement les nombres et le format. Par exemple: 123-456-7890 est un format valide mais n'est PAS un numéro américain valide et cette réponse confirme que les autres utilisateurs ne le font pas.
Si vous ne souhaitez pas que la fonctionnalité d’extension supprime les éléments suivants, y compris la parenthèse: (?:\s * (?: # | x.? | | ext.? | extension)\s * (\ d +)\s *)? :)
edit _ (addendum) J'avais besoin de cela dans une application côté client uniquement, donc je l'ai converti. La voici pour les gens de javascript:
var myPhoneRegex = /(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})\s*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$/i;
if (myPhoneRegex.test(phoneVar)) {
// Successful match
} else {
// Match attempt failed
}
hth. end edit
Cela permet des extensions ou non et fonctionne avec .NET
(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$
Pour valider avec ou sans espaces de fin. Peut-être que lorsque vous utilisez les validateurs .NET et le côté serveur de rognage, utilisez ce regex légèrement différent:
(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})\s*(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+)\s*)?$
Tous valables:
1 800 5551212
800 555 1212
8005551212
18005551212
+1800 555 1212 extension65432
800 5551212 ext3333
N ° invalide
234-911-5678
314-159-2653
123-234-5678
EDIT: Sur la base du commentaire de Felipe, j'ai mis à jour ceci pour l'international.
Sur la base de ce que je pourrais trouver à partir de ici et ici concernant les numéros globaux valides
Ceci est testé comme une première ligne de défense bien sûr. Un élément primordial du numéro international est qu’il n’excède pas 15 caractères. Je n'ai pas écrit de remplacement pour tous les non-chiffres et additionné le résultat. Cela devrait être fait pour être complet. En outre, vous remarquerez peut-être que je n’ai pas combiné les expressions rationnelles nord-américaines avec celle-ci. La raison en est que cette expression rationnelle internationale correspondra aux numéros nord-américains, mais acceptera également un #
invalide connu, tel que +1 234-911-5678
. Pour des résultats plus précis, séparez-les également.
Les pauses et autres instruments de numérotation ne sont pas mentionnés et sont donc non valides conformément à la norme E.164.
\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})?
Avec mot de 1 à 10 lettres pour le poste et poste de 1 à 6 chiffres:
\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})? ?(\w{1,10}\s?\d{1,6})?
Valid International: Le nom du pays pour référence n'est pas un match.
+55 11 99999-5555 Brésil
+593 7 282-3889 Équateur
(+44) 0848 9123 456 UK
+1 284 852 5500 BVI
+1 345 9490088 Grand Caïman
+32 2 702-9200 Belgique
+65 6511 9266 Asie Pacifique
+86 21 2230 1000 Shanghai
+9124 4723300 Inde
+821012345678 Corée du Sud
Et pour votre plaisir d'extension
+55 11 99999-5555 ramal 123 Brésil
+55 11 99999-5555 foo786544 Brésil
Prendre plaisir
Considérer:
^\+?[0-9]{3}-?[0-9]{6,12}$
Cela ne permet que +
au début; il nécessite 3 chiffres, suivis d'un tiret optionnel, suivi de 6 à 12 autres chiffres.
Notez que la regex originale autorise des "numéros de téléphone" tels que 70+12---12+92
, ce qui est un peu plus libéral que ce que vous aviez probablement en tête.
La question a été modifiée pour ajouter:
+ 077-1-23-45-67 et + 077-123-45-6-7
Vous devez maintenant probablement utiliser un système regex prenant en charge les alternatives:
^\+?[0-9]{3}-?([0-9]{7}|[0-9]-[0-9]{2}-[0-9]{2}-[0-9]{2}|[0-9]{3}-[0-9]{2}-[0-9]-[0-9])$
La première alternative est composée de sept chiffres; la seconde est 1-23-45-67; le troisième est 123-45-6-7. Ils partagent tous le plus optionnel +
suivi de 3 chiffres et d’un préfixe optionnel de tiret -
.
Le commentaire ci-dessous mentionne un autre motif:
+ 077-12-34-567
Il n’est pas du tout clair quel devrait être le modèle général - peut-être un ou plusieurs chiffres séparés par des tirets; chiffres à l'avant et à l'arrière?
^\+?[0-9]{3}-?[0-9](-[0-9]+)+$
Cela permettra le préfixe '+ 077-', suivi de toute séquence de chiffres alternant avec des tirets, avec au moins un chiffre entre chaque tiret et aucun tiret à la fin.
/^[0-9\+]{1,}[0-9\-]{3,15}$/
il y a donc d'abord un chiffre ou un +, puis quelques chiffres ou
Commencez par tester la longueur de la chaîne pour voir si elle se situe entre 9 et 15.
Ensuite, utilisez cette expression rationnelle pour valider:
^\+?\d+(-\d+)*$
Ceci est une autre variante du modèle normal* (special normal*)*
, normal
étant \d
et special
étant -
.
J'ai essayé :
^(1[ \-\+]{0,3}|\+1[ -\+]{0,3}|\+1|\+)?((\(\+?1-[2-9][0-9]{1,2}\))|(\(\+?[2-8][0-9][0-9]\))|(\(\+?[1-9][0-9]\))|(\(\+?[17]\))|(\([2-9][2-9]\))|([ \-\.]{0,3}[0-9]{2,4}))?([ \-\.][0-9])?([ \-\.]{0,3}[0-9]{2,4}){2,3}$
Je me suis occupé de codes de pays spéciaux comme 1-97 ... aussi. Voici les chiffres avec lesquels j'ai testé (de Puneet Lamba et MCattle):
***** PASS *****
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
(+230) 5 911 4450
123345678
(1) 345 654 67
+1 245436
1-976 33567
(1-734) 5465654
+(230) 2 345 6568
***** CORRECTLY FAILING *****
(003) 555-1212
(103) 555-1212
(911) 555-1212
1-800-555-1234p
800x555x1234
+1 800 555x1234
***** FALSE POSITIVES *****
180055512345
1 800 5555 1234
+867 800 555 1234
1 (800) 555-1234
86 800 555 1212
Initialement posté ici: Expression régulière correspondant au numéro de téléphone standard à 10 chiffres
^(\+\d{1,2}\s)?\(?\d{3}\)?[\s.-]\d{3}[\s.-]\d{4}$
Correspond aux cas suivants:
123-456-7890
(123) 456-7890
123 456 7890
123.456.7890
+91 (123) 456-7890
En ajoutant à la réponse de @Joe Johnston, ceci acceptera également:
+16444444444,,241119933
(Requis pour la prise en charge des caractères spéciaux par Apple pour les appels entrants - https://support.Apple.com/kb/PH18551?locale=en_US )
\(?\+[0-9]{1,3}\)? ?-?[0-9]{1,3} ?-?[0-9]{3,5} ?-?[0-9]{4}( ?-?[0-9]{3})? ?([\w\,\@\^]{1,10}\s?\d{1,10})?
Remarque: accepte jusqu'à 10 chiffres pour le code d'extension
The following regex matches a '+' followed by n digits
var mobileNumber = "+18005551212";
var regex = new RegExp("^\\+[0-9]*$");
var OK = regex.test(mobileNumber);
if (OK) {
console.log("is a phone number");
} else {
console.log("is NOT a phone number");
}
^[0-9\-\+]{9,15}$
correspondrait à 0 + 0 + 0 + 0 + 0 + 0, ou 000000000, etc.
(\-?[0-9]){7}
correspond à un nombre spécifique de chiffres avec des traits d'union facultatifs dans n'importe quelle position parmi eux.
Quel est ce format supposé être +077?
Ce n'est pas un format valide. Aucun code de pays ne commence par 0.
Les chiffres après le + doivent normalement être un code de pays, long de 1 à 3 chiffres.
En laissant "+" puis le code de pays CC, puis un trait d'union facultatif, puis "0" plus deux chiffres, puis des traits d'union et des chiffres pour les sept prochains chiffres, essayez:
^\+CC\-?0[1-9][0-9](\-?[0-9]){7}$
Oh, et {3,3} est redondant, simplifions à {3}.
^+?\d{3}-?\d{2}-?\d{2}-?\d{3}$
Vous pouvez essayer ceci ....
Que diriez-vous de celui-ci .... J'espère que cela aide ...
^(\\+?)\d{3,3}-?\d{2,2}-?\d{2,2}-?\d{3,3}$