正则表达式允许7到26位数字,7和8位数字除外

时间:2014-11-03 15:22:40

标签: asp.net regex

我想制作正则表达式,允许手机号码从7到26位,但8位和9位除外。

我试过这个,但它不起作用:

^\d(?:[-\s]?\d){6,}((?!\d(?:[-\s]?\d){7}).)((?!\d(?:[-\s]?\d){8}).)((?!\d(?:[-\s]?\d){9,26}).)$

允许输入:数字7到26(但不是8或9位)

  • 1234567
  • 1234567890

不允许输入:

  • 12
  • 123
  • 1234
  • 123456
  • 12345678
  • L123456789

3 个答案:

答案 0 :(得分:0)

我想这个正则表达式将完成这项工作:

^(\d{7}|\d{10,26})$

尝试demo

答案 1 :(得分:0)

您可以使用:

\b(\d{7}(?:\d{3,19})?)\b

RegEx Demo

答案 2 :(得分:0)

你的正则表达式允许或任何一对数字之间的空格或连字符,这是一个要求吗?假设它是,我将使用这个:

^\d(?!(?:[-\s]?\d){7,8}$)(?:[-\s]?\d){6,25}$

我认为你的正则表达式最大的问题是前瞻的放置。它们必须在正则表达式的开头用于做任何好事。正则表达式中发生的事情是\d(?:[-\s]?\d){6,}消耗它可以包含的所有数字,然后在字符串的末尾应用前瞻,其中不再有任何类型的字符。因此,作为否定的先行者,他们总是成功。

另一个问题是每个前瞻后面的点(.);因为它们不在前瞻之内,并且封闭的组不是可选的,每个点必须消耗一个字符,任何范围量词都不会占用(特别是最后一个,{9,26}),并且不仅限于匹配数字,连字符或空格。

看起来你正试图使用​​this answer中演示的专属前瞻语(我称之为)。在这种情况下它没用。