5

在我的练习中,我应该验证电话号码,哪些是正确的:

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
4

3 回答 3

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}$
于 2013-06-25T23:21:26.807 回答
-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
于 2013-06-25T23:42:17.923 回答
-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         
于 2013-06-25T23:10:50.837 回答