2017-03-02 64 views
0

怎么了?带捕获组问题的正则表达式量词

我想获得一些正则表达式的工作,但我面临一些“怪异”(?)行为。

我需要验证以下正则表达式:

  • 只有数字(没有空格的话)
  • 开始与10或11
  • 必须是12个字符

工作后在这一段时间我坚持这一点:

^(10|11)[0-9]{10}$ 

它似乎正在按照要求工作,但我并不满意,因为它乍一看是误导性的。必须是最多12个字符,但它会验证最多10个字符和'开头'字符。

任何人都有更好的解决方案或谨慎解释为什么会发生这种情况? 。

在此先感谢(:

+0

2个12个字符之间可以有我不明白有什么问题,如果它的工作原理是期望。 ..你不喜欢正则表达式字符串的外观..? – Oneiros

+0

这不是我不喜欢它,但有一个10个字符长的验证,它实际上验证12,在维护代码时是误导。 – Ambrosi

+1

如果您有_eye_问题,请使用这个'^(?=(10 | 11))[0-9] {12} $' – sln

回答

1

其效果不理想的工作
{10}意味着你的情况正好是10位
您可以使用{0,10}Matches between 0 and 10 times, as many times as possible, giving back as needed

至于误导性的一部分 - 它是主观的。 ,如果号码必须以10或11开头,所以它必须是2位数字,你可以允许不超过10位数字

+0

谢谢你的回复! 对不起上最大字符错误,这是我的坏:P 其实应该是“必须是12个字符长” 因此,这种行为的量词是正常的吗? – Ambrosi

+0

是的,我相信你想看到像“10或11开头,12位数字长”,而在正则表达式中看不到“12”的东西让你感到不舒服,如果是这种情况,你可以使用一个@sln – dimamah

0

我认为你需要的是fo llowing:

^(10|11)[0-9]{0,10}$ 

这意味着它开始与10或11,长度

Try it here