正则表达式:选择四位数,它不以两个零开始或以两个零结束

时间:2014-10-16 02:17:01

标签: regex

我是Regex的新手,我一直试图这样做而没有任何运气。我做错了什么?

/^([^0]{2}[^0]{2})$/gm

它只选择第一个。

valid:
1234 <--
0101
1001

invalid
1200
0012
0000
2131sdf
sdf2343

4 个答案:

答案 0 :(得分:2)

这就是你要找的东西:

/^(?!0{2})[0-9]{4}(?<!0{2})$/gm

Demo


这使用负前瞻(?!...)和负后瞻(?<!...)来断言在字符串开头后没有两个0 s(0{2})({ {1}})并在字符串结束之前(^)。 Lookarounds是零长度断言,意味着它们不匹配任何字符(就像$^)。因此,在这些断言之间,我们仍然需要匹配4位数($)。

答案 1 :(得分:2)

您可以使用以下使用Negative Lookahead的正则表达式。

^(?!00|.*00$)\d{4}$

说明:

^        # the beginning of the string
(?!      # look ahead to see if there is not:
  00     #   '00'
 |       #  OR
  .*     #   any character except \n (0 or more times)
  00     #   '00'
  $      #   before an optional \n, and the end of the string
)        # end of look-ahead
\d{4}    # digits (0-9) (4 times)
$        # before an optional \n, and the end of the string

Live Demo

答案 2 :(得分:0)

这就是你要找的东西:

/^(?!0{2})[0-9]{4}(?<!0{2})$/gm

这使用负向前瞻(?!...)和负后瞻(?<!...)来断言在字符串开始后没有两个0(0{2})(^)在字符串结束之前($)。

Lookarounds是零长度断言,意味着它们不匹配任何字符(就像^$)。因此,在这些断言之间,我们仍然需要匹配4位数([0-9]{4})。

答案 3 :(得分:0)

还有一种模式:

^(?:(?!00)\d\d){2}$

Demo