2017-03-07 89 views
2

我有我的正则表达式,它正确匹配电话号码。JavaScript匹配括号在正则表达式中存在左括号或右括号

var reg2= /^(\d?)[-. ]?[(]?(\d{3})[)]?[- ]?(\d{3})[- ]?(\d{4})$/g; 

我遇到的问题是我REG2返回有效期为below.How做我创建一个普通的快递,如果它检测到圆括号,它需要另一圆括号是有效的投入,否则返回无效。

"555)-555-5555" 
"(555-555-5555" 
"1 555)555-5555" 

编辑

同时它应该与工作定期

15556667777 
1-555-666-7777 
1 555 666 7777 

回答

1

您可以使用此正则表达式为确保您只匹配匹配括号或没有括号:

/^\d?[-. ]*(?:\(\d{3}\)|\d{3})[- ]*\d{3}[- ]*\d{4}$/ 

(?:\(\d{3}\)|\d{3})交替允许(111)111在电话号码的开头。

RegEx Demo

+0

我可以问你是什么$之间的区别'(?:\(\ d {3} \)| \ d {3})'和'(\(\ d {3} \ )| \ d {3})'。明显的区别是$'?:'。如果没有区别,那么专门用于$'?:'的是什么? –

+0

'(?:...)'是一个非捕获组,'(...)'是一个捕获组。使用非捕获组被认为对整体效率更好。 – anubhava

+1

啊,你的权利。那很完美。谢谢。 –