PHP正则表达式 - 接受除1之外的所有正数

时间:2013-09-26 09:13:43

标签: php regex

Regexes和我有爱与恨的关系。我需要匹配(接受)除了数字1和0之外的所有数字。将其视为数学而不是字符串,数字> = 2应匹配。另外请考虑这是Zend路由参数(reqs)的一部分所以我必须使用正则表达式,除非我想扩展Route类等等。)

103 => 103
013 => 013
201 => 201
340 => 340
111 => 111
001 => no match
010 => 010
100 => 100
  1 => no match
000 => no match
 00 => no match
  0 => no match

我尝试了[^1][|\d+]的一些变体(试图一次指出一个数字:D)但到目前为止,我已经失败了:(

Nailed it !!

我正在寻找的正则表达式似乎是以下

^([2-9]|[2-9]\d|[1-9]\d{1,})$

5 个答案:

答案 0 :(得分:6)

只需使用negative lookahead排除所有零的模式,这些零可选地以一个结尾:

/^(?!0*1?$)\d+$/

如果你在没有parens的情况下阅读它,这个正则表达式会匹配由一个或多个十进制数字组成的任何内容。 parens包含一个断言,只有当模式0*1?$ 不能从输入的开始处匹配时才会使正则表达式匹配,因此这将删除所有零的场景和任何一个的场景前置零的数量。

答案 1 :(得分:2)

对结果使用否定以匹配所有零和

if(!preg_match("^[01]+$",$string)) {...}

答案 2 :(得分:0)

你错误的想法。

^[01]+$

将匹配所有onyl包含0或1。

如果匹配拒绝,如果不匹配,请检查其有效数字,并且您应该匹配

答案 3 :(得分:0)

//if the numbers only include  0 or 1 reurn false;else will return the numbers
function match_number($number){
    if(preg_match("/^[01]*$/", $number) > 0){
        return false;
    } else {
        return $number;
    }
 }

答案 4 :(得分:0)

以下正则表达式将匹配任何数字(不是数字,但数字作为一个整体)> = 2

^([2-9]|[2-9]\d|[1-9]\d{1,})$

感谢答案中的所有宝贵帮助,其中一些非常有用,帮助我达到了预期的效果。