具有多个负面条件的正则表达式

时间:2014-10-15 15:59:37

标签: regex

我正在尝试使用正则表达式来填充以下条件:

1- string必须长8个字符

2-所有字符必须是数字

3-任何数字不得重复8次 (即:11111111,禁止22222222)

禁止使用4至1套房 (即:12345678)

禁止使用5-8对1套房 (即:不允许87654321)

到目前为止,我正在使用这个正则表达式1,2和& 3:

^(?=.{8})(\d)(?!\1{7})\d{7}$

这一点适用于第4点和第4点。 5:

^(?!(12345678$|87654321$))

但是我不能将它们组合在一个较长的正则表达式中。这就是为什么我在大脑爆炸前来到这里寻求帮助的原因。 谢谢你的帮助。

4 个答案:

答案 0 :(得分:2)

^(?!(\d)\1{7})(?!12345678|87654321)\d{8}$

试试这个。看看演示。

http://regex101.com/r/dZ1vT6/29

答案 1 :(得分:1)

您可以使用此模式:

^(?=[0-9]{8}$)(?!12345678|87654321).*?(.)(?!\1).+

另一种方式(如果支持):

^(?=[0-9]{8}$)(.)\1*+.++(?<!12345678|87654321)

第二种模式背后的想法是将条件从最严格/可能的条件分类到较少限制/可能的条件。

正则表达式引擎需要支持占有量词和第二种模式的后视。

答案 2 :(得分:1)

这个应该符合您的需求:

^(?!(\d)\1+$)(?!12345678$|87654321$)\d{8}$

Regular expression visualization

Debuggex Demo

答案 3 :(得分:1)

这是另一种方式

 # ^(?=\d{8}$)(?!(\d)\1{7}|12345678|87654321).*$

 ^ 
 (?= \d{8} $ )
 (?!
      ( \d )            # (1)
      \1{7} 
   |  12345678
   |  87654321
 )
 .* 
 $