我有这样的判决:
^(\(\d{3}\)[ ]?\d{3}-\d{4})|(\d{3}\.\d{3}\.\d{4})|(\d{3}\-\d{3}\-\d{4})|[0-9]{10}$我只需要这些电话号码格式来匹配:
有任何方法来简化我当前的正则表达式吗?
发布于 2015-04-06 18:32:06
RegexBuddy显示:
\(?\b[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}\b发布于 2015-04-06 18:36:56
就个人而言,我不会费心验证用户的格式。无论你想出什么,在某些情况下都可能会失败。我认为更好的做法是接受宽松的输入,并尽力纠正。
老实说,当你只需要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"发布于 2015-04-06 19:02:00
如果使用捕获组捕获分隔符,使用反向引用\1重用分隔符,则可以稍微简化一些,并避免使用几种替代方法:
^(?:\(\d{3}\) ?\d{3}-\d{4}|\d{3}([.-]?)\d{3}\1\d{4})$https://stackoverflow.com/questions/29477181
复制相似问题