2013-03-07 6 views
2

J'ai écrit ce regex pour identifier les numéros de téléphone de type américain:Comment améliorer ce Regex?

\(?\d{3}\)?(-|\s)\d{3}-\d{4} 

Cela fonctionne pour les numéros de téléphone comme:

217-244-2424 et (217) 244-2424.

Cependant, il fonctionne aussi entre parenthèses déséquilibrées comme (217-244-2424

Comment le regex améliorer pour vous assurer que la parenthèse sont équilibrés? (je suis au courant des questions sur les numéros de téléphone regex demandé before, mais je ne pouvais pas trouver ce que je cherchais à partir de là)

+2

Pourquoi ne supprimez-vous pas les non-chiffres? – Blender

+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) – Johnsyweb

+0

@Blender: Yup! http://stackoverflow.com/a/123681/78845 – Johnsyweb

Répondre

0

I ne l'avez pas testé, mais pourquoi ne pas utiliser l'opérateur d'alternance ("|")? Vous pouvez choisir d'avoir les deux parenthèses, ou aucune d'entre elles:

(\(\d{3}\)|\d{3})(-|\s)\d{3}-\d{4} 
+0

manojlds a été plus rapide que moi ... – JonesV

+0

Merci. C'était plus simple que je ne le pensais. – user2063763

2

Je vais vous répondre à la question spécifique sur regex vous pouvez essayer quelque chose comme ça pour gérer les parenthèses:..

^(\(\d{3}\)|\d{3})-(\d{3})-(\d{4})$ 
+0

l'ai eu, merci! – user2063763