web-dev-qa-db-fra.com

Téléphone regex de validation

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?

46
Nir

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})/
  • (123) 456 7899
  • (123) .456,7899 
  • (123) 456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899

sont pris en charge

35
Gent

 enter image description here 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

20
Joe Johnston

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.

8
Jonathan Leffler
/^[0-9\+]{1,}[0-9\-]{3,15}$/

il y a donc d'abord un chiffre ou un +, puis quelques chiffres ou

5

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 -.

5
fge

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

4
Ludovic Agathe
^(\+\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

3
Sanjaysinh Zala

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

0
Ravi
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
appsmatics
  ^[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}.

0
g1smd
^+?\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}$
0
Premanshu