正则表达式来只允许数字,hypens,空间,括号并且应该以数字(JavaScript的)[重复]结束

2019-09-21 13:35发布

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

我需要验证美国的电话号码。 这可能是格式为:

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

但它不应该是

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

它应该接受数字,连字符,空间和括号。

目前我使用

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

这不验证的开始或结束冲刺。

Answer 1:

^\(?\d{3}\)?[- ]?\d{3}[- ]?\d{4}$


Answer 2:

那么我的想法是(经过一番搜索)不是新的了! 看这个:

一个全面的正则表达式的电话号码验证

这是BTW一个很好的建议。



Answer 3:

这一个是可能是正确的(假设这取决于你所使用的正则表达式引擎做了一些分析错误。这也是丑陋的地狱:(。

(?:\d{3}(?:\d{7}|\-\d{3}\-\d{4}))|(?:\(\d{3}\)(?:\-\d{3}\-)|(?: \d{3} )\d{4})


Answer 4:

(^\(?[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

我希望这可以帮助,或者至少你移动在正确的方向。



Answer 5:

这应该做的伎俩:

/^([\d]{6}|((\([\d]{3}\)|[\d]{3})( [\d]{3} |-[\d]{3}-)))[\d]{4}$/
  • 它首先通过检查前6位是xxxxxx
  • 如果不是它看起来,如果前三个数字(xxx)或只是xxx
    • 如果其中的一个,它判断未来三年是xxx-xxx-
  • 在最后它会检查有四个结尾数字xxxx


文章来源: Regex to allow only digits, hypens, space, parentheses and should end with a digit (javascript) [duplicate]