4

可能重复:
美国电话号码验证

我需要验证美国电话号码。它可以是以下格式:

xxx-xxx-xxxx
(xxx) xxx xxxx
(xxx)-xxx-xxxx
xxxxxxxxxx

但不应该

xxx-xxx-xxxx-
-xxx-xxx-xxxx

它应该接受数字、连字符、空格和括号。

目前我使用

^\[0-9 \-\. ]+$ 

它不会在开头或结尾验证破折号。

4

5 回答 5

6
^\(?\d{3}\)?[- ]?\d{3}[- ]?\d{4}$
于 2012-08-23T22:58:56.720 回答
4

好吧,我的想法(经过一番搜索)根本不是新的!看这个:

用于电话号码验证的综合正则表达式

顺便说一句,这是一个很好的建议。

于 2012-08-23T23:07:14.180 回答
2

这一个可能是正确的(假设某些解析错误取决于您使用的正则表达式引擎。它也很丑陋:(。

(?:\d{3}(?:\d{7}|\-\d{3}\-\d{4}))|(?:\(\d{3}\)(?:\-\d{3}\-)|(?: \d{3} )\d{4})
于 2012-08-23T23:05:29.493 回答
2
(^\(?[0-9]{3}\)?\-?\s?[0-9]{3}\-?\s?[0-9]{4}[^-])

我在http://regexhero.net/tester/上对此进行了测试,并让它选择以下模式:

xxx-xxx-xxxx 
(xxx) xxx xxxx 
(xxx)-xxx-xxxx
xxxxxxxxxx

它忽略了以下模式:

xxx-xxx-xxxx- 
-xxx-xxx-xxxx

我希望这会有所帮助,或者至少能让你朝着正确的方向前进。

于 2012-08-23T23:33:36.143 回答
0

这应该可以解决问题:

/^([\d]{6}|((\([\d]{3}\)|[\d]{3})( [\d]{3} |-[\d]{3}-)))[\d]{4}$/
  • 它首先检查前 6 位数字是否为xxxxxx,
  • 如果不是,它看起来是前三位数字是(xxx)还是只是xxx
    • 如果其中之一它检查接下来的三个是xxx-xxx-
  • 最后它检查是否有四个尾随数字xxxx
于 2012-08-23T23:13:47.553 回答