在我的练习中,我应该验证电话号码,其中正确的是:
1234567890
123-456-7890
123.456.7890
(123)456-7890
(123) 456-7890
456-7890
我已尝试过[(]?[0-9][0-9][0-9][).-]? ?[0-9][0-9][0-9][.-]?[0-9][0-9][0-9][0-9]
,但它似乎也接受(123.456-7890
之类的内容。我怎么能处理这个?或者我应该采取完全不同的方式?
以下是一些无效的电话号码:
123-45-6789
123:4567890
123/456-7890
答案 0 :(得分:0)
尝试这个(使用预测来匹配括号和其他余额检查):
^(?:((?=\(.*\).*\-)|(?!.*\()(?!.*\)))\(?[0-9]{3}\)?(((?<=[)])|[\-\s])(?=.*\-)|\.(?=.*\.)|(?<=^)|(?=[0-9]+$)))?[0-9]{3}[\s.-]?[0-9]{4}$
或者这个(使用\d
,因为这是我参加最短正则表达式的游行):
^((\d{3}-|\(\d{3}\)\s?)?\d{3}-|^\d{3}(\.)?\d{3}\3)\d{4}$
答案 1 :(得分:-1)
此模式适用于您的示例,我在没有java转义的情况下编写它:
^(?>\(\d{3}\) ?|\d{3}[.-]?)?\d{3}[.-]?\d{4}$
说明:
^ begining of the string
(?> open an atomic group
\(\d{3}\) ? 3 digits with parenthesis followed by a space or not
| OR
\d{3}[.-] 3 digits followed by . or - or not
) close atomic group
? the atomic group is optional
\d{3} 3 digits
[.-]? followed by a . or a - (optional)
\d{4} 4 digits
$ end of the string
答案 2 :(得分:-1)
<强>正则表达式强>
^\d{10}|^(\(\d{3}\)\s?)?\d{3}-\d{4}$|^\d{3}([.-])\d{3}\2\d{4}$
匹配以下
1234567890
123-456-7890
123.456.7890
(123)456-7890
(123) 456-7890
456-7890
与
不匹配123-45-6789
123:4567890
123/456-7890
(123-456-7890
123.456-7890
(123)456.7890