我有这个正则表达式:
^(\(\d{3}\)[ ]?\d{3}-\d{4})|(\d{3}\.\d{3}\.\d{4})|(\d{3}\-\d{3}\-\d{4})|[0-9]{10}$
我需要仅这些电话号码格式才能匹配:
有没有办法简化我当前的正则表达式?
答案 0 :(得分:2)
RegexBuddy显示:
\(?\b[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}\b
答案 1 :(得分:2)
就个人而言,我不打算验证用户的格式。无论你想出什么,在某些情况下都可能会失败。我认为接受更宽松的输入并尽力纠正更好。
老实说,当您需要的是10位数时,谁关心()
,-
和.
?您可以在后端轻松添加格式。
相反,我会做这样的事情
// ugly user input, but still valid
var userInput = "(500) 423.2345";
// remove all non-digits
var phone = userInput.replace(/\D/g, '');
//=> "5004232345"
// verify that 10 digits are present
if (phone.length !== 10) {
alert("invalid phone number");
}
然后,您可以将数字存储为您想要的任何格式
// example
[
"(",
phone.substr(0,3),
")",
phone.substr(3,3),
"-",
phone.substr(6,4)
].join(" ")
// "( 500 ) 423 - 2345"
答案 2 :(得分:0)
如果您使用捕获组来捕获分隔符并使用反向引用\1
来重复使用它,您可以简化一些并避免使用多种备选方案:
^(?:\(\d{3}\) ?\d{3}-\d{4}|\d{3}([.-]?)\d{3}\1\d{4})$