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,})$
答案 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,})$
感谢答案中的所有宝贵帮助,其中一些非常有用,帮助我达到了预期的效果。