正则表达式匹配PHP中的非负整数?
我似乎通过以下方式使其与以下regexp一起工作: 但奇怪的是,它与正则表达式匹配PHP中的非负整数?,php,regex,Php,Regex,我似乎通过以下方式使其与以下regexp一起工作: 但奇怪的是,它与-0匹配,因为regexp中根本不允许-。为什么? 更奇怪的是,如果您切换被划分的部分: @^0|(?:[1-9][0-9]*)$@ 它匹配所有负整数,如-2和-10等 我错过了什么?非负整数有更好的正则表达式吗?您的正则表达式:@^(?[1-9][0-9]*)0$@ 表示匹配开始的数字 带有1-9后跟任何数字0或 更多次或 匹配以0结尾的数字 显然-0满足条件2,因此您获得匹配 您需要的正则表达式是:@^(?[1-9][0-
-0
匹配,因为regexp中根本不允许-
。为什么?
更奇怪的是,如果您切换被
划分的部分:
@^0|(?:[1-9][0-9]*)$@
它匹配所有负整数,如-2
和-10
等
我错过了什么?非负整数有更好的正则表达式吗?您的正则表达式:@^(?[1-9][0-9]*)0$@
1-9
后跟任何数字0
或
更多次或0
结尾的数字-0
满足条件2,因此您获得匹配
您需要的正则表达式是:@^(?[1-9][0-9]*|0)$@
它匹配0
或任何其他+ve
编号,但不带前导0
。如果允许前导0,则需要检查的是输入是否包含可以使用的数字:^\d+$
,如Mark所述
还有,为什么不做一个简单的检查,比如:
if($input >= 0)
// $input is non -ve.
您还可以使用前瞻检查以零开头的大小写,例如/^(?0)\d+$/d
(不要忘记d
修饰符!)
if($input >= 0)
// $input is non -ve.