正则表达式:验证长度,必须包含数字,必须包含3个连字符

时间:2011-10-03 15:40:12

标签: regex phone-number

我正在寻找验证电话号码的正则表达式。

以下是我希望我的正则表达式验证的内容:

  • 长度必须为14到17个字符
  • 必须是所有数字且包含3个连字符

接受格式:

5-555-555-5555
55-55-555-5555
55-555-555-5555
555-555-555-5555
5555-555-555-5555

我目前的代码如下:

^.*(?=.{14,17})(?=.*\-{3,})(?=.*[\d\-]).*$

允许使用3个以上的连字符,长度允许超过17个字符。

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

这是一个丑陋的暴力版本,它只是明确地列出了4种有效格式:

^(\d-\d{3}-\d{3}-\d{4})|(\d{2}-\d{2}-\d{3}-\d{4})|(\d{2}-(\d{3}-){2}\d{4})|((\d{3}-){3}\d{4}$)|(^\d{4}-(\d{3}-){2}\d{4})$

以下是Rubular链接。

答案 1 :(得分:0)

这个怎么样:

/^(?=.{14,17}$)(\d+-){3}\d+$/

答案 2 :(得分:0)

你可以尝试这个

/(?=^.{14,17}$)^\d+-\d+-\d+-\d+$/.test('2332-32332-233-22')

(?=.{14,17})首先断言使用前瞻,字符串的长度在14到17个字符之间。然后匹配以查看数字之间有三个连字符。 ^ and $确保没有其他内容。

答案 3 :(得分:0)

我知道这已经过时了,但我接受了挑战并制作了一份经过编辑的非暴力版Amber的回答。

/^(?=.{14,17}$)\d{1,4}(?:\-\d{3}){3}\d$/

这能够强制执行格式(x {1,4} -xxx-xxx-xxxx),并且比Mark Wilkins的答案要短。

Amber的答案是不完整的,因为它没有强制执行格式(5-555-555-5555555在明确说明它不是有效格式时已经过验证),但它确实强制使用-1 char而不是Narendra Yadala的答案

编辑(14/01/2014):

这是一个简化的答案:

/^\d{1,4}(?:\-\d{3}){3}\d$/

我所做的很简单:我带走了前瞻。

在这种情况下没用。

这一个比Narendra Yadala的答案多-13个字符,而且比之前的字母多出-12个字符。