我想出了我国家电话的正常表达,但我发现了一些事情。
此处的规则是:(Area Code) Prefix - Sufix
我想我可以将3个简单的正则表达式与OR" |"像这样:
/(\(?\d{3}\)?[- .]?\d{4}[- .]?\d\d\d\d)|(\(?\d{4}\)?[- .]?\d{3}[- .]?\d\d\d\d)|(\(?\d{5}\)?[- .]?\d{2}[- .]?\d\d\d\d)/
我做错的事情是\d\d\d\d
并不匹配sufix的4位数,例如:(011)4740-5000这是一个有效的电话号码,工作正常但如果加上额外的数字,它也将作为有效的电话号码返回,即:(011)4740-5000000000
答案 0 :(得分:1)
您应该使用^
和$
来匹配整个字符串
例如^\d{4}$
将恰好匹配4位数而不是更少。
这是完整的正则表达式
^((\(?\d{3}\)? \d{4})|(\(?\d{4}\)? \d{3})|(\(?\d{5}\)? \d{2}))-\d{4}$
根据你的正则表达式模式分隔符可以是-
,.
或单个空格然后尝试
^((\(?\d{3}\)?[-. ]?\d{4})|(\(?\d{4}\)?[-. ]?\d{3})|(\(?\d{5}\)?[-. ]?\d{2}))[-. ]?\d{4}$
答案 1 :(得分:1)
这种模式适用于我:
/^\\(?(\d{3,5})?\\)?\s?(15)?[\s|-]?(4)\d{2,3}[\s|-]?\d{4}$/
答案 2 :(得分:0)
您需要通过指示锚点的开头和结尾来匹配完整表达式。你也不需要不同长度的轮换。
/^(?=(\D*\d){11}$)\(?\d{3,5}\)?[- .]?\d{2,4}[- .]?\d{4}$/
以下是细分:
(?=(\D*\d){11}$) is a non-capturing group ensuring that there are 11 digits total,
with any number of non-digits amongst them
\(?\d{3,5}\)?[- .]? matches 3-5 digits in parens (area code), followed by a separator
\d{2,4}[- .]? matches 2-4 digits (prefix), followed by a separator
\d{4} matches the suffix
答案 3 :(得分:0)
我在regex101中对此进行了测试:
/^((?:\(?\d{3}\)?[- .]?\d{4}|\(?\d{4}\)?[- .]?\d{3}|\(?\d{5}\)?[- .]?\d{2})[- .]?\d{4})$/
^
匹配字符串的开头
(
捕获组的开始
(?:
非捕获组的开始
)
结束非捕获组[- .]?\d{4}
电话号码的最后四位数字)
结束捕获组$
匹配字符串的结尾答案 4 :(得分:0)