正则表达式匹配PHP中的非负整数?

时间:2010-04-19 03:24:05

标签: php regex

我似乎通过preg_match()使用以下正则表达式来实现它:

@^(?:[1-9][0-9]*)|0$@

然而,考虑到正则表达式中根本没有“ - ”,它与'-0'匹配是很奇怪的。为什么呢?

更奇怪的是,如果你将部分切换为|:

@^0|(?:[1-9][0-9]*)$@

它匹配所有负整数,例如'-2'和'-10'等。

我在这里缺少什么?非负整数的任何更好的正则表达式?

1 个答案:

答案 0 :(得分:5)

你的正则表达式:@^(?:[1-9][0-9]*)|0$@

  1. 表示匹配那些开头的数字 1-9后跟任意数字0或 更多次 OR
  2. 匹配以0结尾的数字。
  3. 显然-0满足条件2,所以你得到了匹配。

    您需要的正则表达式是:@^(?:[1-9][0-9]*|0)$@

    匹配0或任何其他+ve号码而不带前导0。如果允许前导0,那么您需要检查的是输入是否包含您可以使用的数字:^\d+$作为Mark提及。

    另外,为什么不做一个简单的检查,如:

    if($input >= 0)
     // $input is non -ve.