2011-09-03 132 views
1

我创建了一个正则表达式验证电话号码有以下要求:加强正则表达式来验证电话号码

  • 允许的字符:+ space () – 0-9

  • +(可以像(+61) 312 405 678修剪后第一个字符或+61 312 405 678

  • 短划线在数字的任何位置都是允许的。

  • 长分8最大16 - 中的边界条件

的情况下显示错误,但我需要提高它一下。我想验证,如果+在数字中,它必须只在开始,但我的正则表达式不检查这个。请帮忙。这是我的正则表达式到目前为止:

^[\\(?\\+?(\\d{2})\\)?[- ]?(\\d{0,})[- ]?(\\d{0,})[- ]?(\\d{0,})]{9,16}$ 
+0

[对电话号码验证全面的正则表达式(http://stackoverflow.com/questions/123559/a-comprehensive-regex-for-phone-number-validation) –

+0

@布莱恩 - 罗奇可能重复:我检查所有的正则表达式都提供了它们,它们都具有我刚刚提到的有关打开和关闭括号的相同问题。 –

回答

1

添加\ + {0,1}应该做的伎俩。

完成后的正则表达式应该是这样的

^\+{0,1}[\(?\+?(\d{2})\)?[ -]?(\d{0,})[- ]?(\d{0,})[- ]?(\d{0,})]{9,16}$

+0

这很接近,但“+”可以在第一个“()”或外部。我只注意到他的整个正则表达式是一个组,我不认为他是需要的。 –

+0

@ brian-roach:是的,这就是我需要增强我已经创造的! –

+0

还我只是检查了一些更多的测试案例和上述正则表达式失败:+61)456 789 980 它应该说明了上面的输入错误,我们不要有一个开放的支架,但它是为同一给予如此! –

0

我会扔掉所有可选角色,然后检查是否匹配\\+?\\d{8,16}

或者,允许任意位置的任意数量的标点符号; [\\s().-]*(\\+[\\s().-]*)?(\\d[\\s().-]*){8,16}

+0

找到解决方案,认为它可能帮助别人的未来:??? ^ [[\\ + \\ d {2}] [\\ \\小号 - ] [\\ d [\\ - \ \ s]?]] {9,15} $ | [\\({1}] \\ + {1} \\ d {2} [\\){1}] [[\\ s \\ - ]] ?[?\\ d [\\ - \\ S]]] {9,10} $ 这篇自己atlast;) –

+0

你的正则表达式看起来威猛奇怪,如果有多个连续的空格会失败。 – tripleee

+0

你可以提出任何改进? –