2010-07-15 6 views
6

Je sais qu'il existe une tonne d'exemples regex sur la façon de faire correspondre certains types de numéros de téléphone. Pour mon exemple, je veux juste autoriser les chiffres et quelques caractères spéciaux. J'ai encore du mal à y arriver.Regex - numéro de téléphone simple

Les numéros de téléphone qui devraient être autorisés pourraient prendre ces formes

5555555555 
555-555-5555 
(555)5555555 
(555)-555-5555 
(555)555-5555 and so on 

Je veux juste quelque chose qui va permettre à [0-9] et aussi des caractères spéciaux « (», «) » et « - »

jusqu'à présent mon expression ressemble à ceci

/^[0-9]*^[()-]*$/ 

Je sais que cela est faux, mais logiquement je crois que cela signifie permettre à un nombre 0-9 ou et laisser les caractères (,), et -.

+0

Je recommande également la recherche pour les personnages. Et + puisque plusieurs fois ces deux sont utilisés soit pour entrer des codes de pays ou tout simplement un style différent. Une autre option que j'ai utilisée auparavant est de supprimer tous les non-chiffres et ensuite de vérifier les chiffres pour la longueur correcte. Aussi, je suis content que vous le fassiez. Est-ce si ennuyeux pour de nombreux sites ou programmes qui vous forcent dans un format spécifique, lorsque l'ordinateur peut facilement vérifier! – christophercotton

+0

duplication possible de [Une regex complète pour la validation du numéro de téléphone] (http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) – Mark

Répondre

4

Ce match ce que vous voulez des chiffres, (,) et -

/^[0-9()-]+$/ 
+0

Merci! cela a fonctionné – IamBanksy

+0

Pour cela, je veux autoriser les espaces et + m sign aussi. comme +91 555 555 555. Pouvez-vous s'il vous plaît me suggérer le bon. – chandu

+0

C'est presque ce que je veux mais je veux l'imposer pour finir avec un nombre –

1

Pourquoi avez-vous un ^ errant là-dedans? Je pense que vous vouliez dire [()-] Cela vous oblige à avoir deux début de chaîne dans la regex, qui ne correspondra jamais.

En outre, \d est un raccourci agréable pour [0-9]. Ils sont exactement les mêmes.

En outre, cela ne correspond à un groupe de nombres, puis un tas de ( ou ) ou -. Quelque chose comme: 1294819024()()()()()-----()- correspondrait. Je pense que vous voulez que l'ensemble soit en mesure de répéter, quelque chose comme: ^(\d*[()-]*)*$. Maintenant, vous pouvez faire correspondre des séquences répétées de cela.

Maintenant, il est important de noter que imbriquée * sont généralement inefficaces, nous pouvons réaliser que nous sommes en train de vouloir correspondre à un chiffre et la ponctuation que vous voulez: [\d()-]*

+0

Est-ce que le [^() -] ne veut PAS faire correspondre ces caractères? – christophercotton

+0

Oui! Ne pas penser directement ... –

5
^(\(\d{3}\)|\d{3})-?\d{3}-?\d{4}$ 
  • \(\d{3}\)|\d{3} trois chiffres avec ou sans () - La regex plus simple serait \(?\d{3}\)? mais cela permettrait (555-5555555 et 555)5555555 etc.
  • Un optionnel - suivi de trois chiffres
  • Une option - suivi de quatre chiffres

Notez que cela permettrait encore 555555-5555 et 555-5555555 - je ne sais pas si ceux-ci sont couverts dans votre et ainsi de suite partie

+0

Merci c'est correct je pense que ma question n'a pas été formulée correctement. Je n'avais pas besoin de spécifier une longueur spécifique sur les numéros pour permettre les numéros de téléphone étrangers, etc. Merci quand même. – IamBanksy

0

pour les chiffres que vous peut utiliser \d. Pour plus d'un chiffre, vous pouvez utiliser \d{n}, où n est le nombre de chiffres que vous voulez faire correspondre. Certains caractères spéciaux doivent être échappés, par exemple \( correspond à (. Par exemple: \(\d{3}\)\-\d{3}\-\d{4} correspond (555) -555-5555.

0

Le deuxième carat (afaik) va casser tout ce que vous faites car cela signifie "début de chaîne".

Ce que vous semblez demander est donc:

  • début de la chaîne, suivi par ...
  • un certain nombre de caractères numériques, suivi par ...
  • début de la chaîne, suivie ...
  • un nombre quelconque de (', ')', ou '-' caractères, suivie par ...
  • fin de chaîne

Ce qui ne fonctionnera pas même si ce deuxième carat ne fait rien, parce que vous ne comptez pas quoi que ce soit après le premier '(', ')', ou '-', et en fait probablement valider un vide chaîne si cela.

Vous voulez /^[0-9()-]+$/ pour un motif très brut qui va "travailler".

0

Si vous faites Numérotons que la meilleure solution est de supprimer tous les caractères non-chiffres, puis tester juste pour voir si la longueur == 10.

Questions connexes