我有这样的正则表达式:这个正则表达式可以简化吗?
^(\(\d{3}\)[ ]?\d{3}-\d{4})|(\d{3}\.\d{3}\.\d{4})|(\d{3}\-\d{3}\-\d{4})|[0-9]{10}$
我需要只这些电话号码的格式相匹配:
- (555)555-5555
- (555)555-5555
- 555-555-5555
- 555.555.5555
有什么办法可以简化我目前的正则表达式吗?
我有这样的正则表达式:这个正则表达式可以简化吗?
^(\(\d{3}\)[ ]?\d{3}-\d{4})|(\d{3}\.\d{3}\.\d{4})|(\d{3}\-\d{3}\-\d{4})|[0-9]{10}$
我需要只这些电话号码的格式相匹配:
有什么办法可以简化我目前的正则表达式吗?
使用RegexBuddy表演:
\(?\b[0-9]{3}\)?[-. ]?[0-9]{3}[-. ]?[0-9]{4}\b
感谢您的回答,但某些匹配得不到。我只需要严格匹配上面提到的格式。我不能混用“。”用“ - ”表示。 – Bazinga
就个人而言,我不会理会验证用户的格式。无论你想出什么可能会在某些情况下失败。我认为接受宽松的投入会更好,并尽力纠正。
老实说,谁在乎()
,-
和.
当你需要的只是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"
可以简化一点,避免如果几个备选方案使用捕获组来捕获分隔符和反向引用\1
以重用它:
^(?:\(\d{3}\) ?\d{3}-\d{4}|\d{3}([.-]?)\d{3}\1\d{4})$
如果你'想要**严格**然后保持原样。 – hwnd
@hwnd我相信你是对的。对于正则表达式我还是个新手,所以我想在投入之前先与一些超级大师进行验证。谢谢。 – Bazinga
我希望你不是要验证电话号码字段。处理电话号码的正确方法是去掉非数字字符,然后评估数字序列。 – zzzzBov