1

正则表达式和我有着爱恨交织的关系。我需要匹配(接受)除数字 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),但到目前为止我已经失败了:(

搞定了!!

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

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

5 回答 5

6

只需使用负前瞻来排除全零且可选地以一结尾的模式:

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

如果您在没有括号的情况下阅读它,则此正则表达式匹配由一个或多个十进制数字组成的任何内容。括号包含一个断言,该断言仅当模式0*1?$ 无法从输入的开头开始匹配时才导致正则表达式匹配,因此这消除了全零和一个带有任意数量的前置零的场景。

于 2013-09-26T09:16:50.050 回答
2

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

if(!preg_match("^[01]+$",$string)) {...}
于 2013-09-26T09:17:24.163 回答
0

你的想法是错误的。

^[01]+$

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

如果匹配拒绝它,如果它不匹配检查它的有效数字,你应该有一个匹配

于 2013-09-26T09:17:52.223 回答
0

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

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

感谢您在答案中提供的所有宝贵帮助,其中一些确实很有帮助并帮助我达到了预期的结果。

于 2013-09-26T10:19:55.283 回答
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;
    }
 }
于 2013-09-26T09:37:11.160 回答