2011-10-03 105 views
0

我正在寻找用于验证电话号码的正则表达式。正则表达式:验证长度,必须包含数字,必须包含3个连字符

这里是想我我正则表达式来验证:

  • 长度必须在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个字符。

在此先感谢您的帮助!

回答

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链接。

+0

这实现了我的原始请求,然后进一步执行格式化。我在这个应用程序中使用暴力没有问题。非常感谢你! – mduschak

+0

@mduschak:有了正则表达式,我为了维护目的有时候更喜欢蛮力而非聪明。 –

0

如何:

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

这完美的作品! – mduschak

0

你可以试试这个

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

(?=.{14,17})第一人称先行使用的字符串的长度是14首17个字符之间。然后它匹配以查看数字之间有三个连字符。 ^ and $确保没有别的。

0

我知道这是旧的,但我接受了挑战,并编辑了Amber的答案非暴力版本。

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

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

琥珀的答案是不完整的,因为它没有强制执行格式(5-555-555-5555555经过验证,当它清楚地表明它不是一个有效的格式),但它确实强制长度为-1 char比Narendra Yadala's回答。

EDIT(14/01/2014):

这是一个减少的答案:

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

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

在这种情况下没用。

这是一个-13字长的Narendra Yadala的答案和-12字符比我以前的。

相关问题