我似乎通过preg_match()使用以下正则表达式:
@^(?:[1-9][0-9]*)|0$@
Run Code Online (Sandbox Code Playgroud)
然而,考虑到正则表达式中根本没有" - ",它与'-0'匹配是奇怪的.为什么?
更奇怪的是,如果你将部分切换为|:
@^0|(?:[1-9][0-9]*)$@
Run Code Online (Sandbox Code Playgroud)
它匹配所有负整数,如'-2'和'-10'等.
我在这里错过了什么?非负整数的任何更好的正则表达式?
你的正则表达式: @^(?:[1-9][0-9]*)|0$@
1-9以任何数字开头的数字0或者更多的数字OR0.显然-0满足条件2所以你得到了匹配.
你需要的正则表达式是: @^(?:[1-9][0-9]*|0)$@
匹配0或任何其他+ve数字没有领先0.如果允许前导0,那么您需要检查的是输入是否包含您可以使用的数字:^\d+$Mark提及.
另外,为什么不做一个简单的检查:
if($input >= 0)
// $input is non -ve.
Run Code Online (Sandbox Code Playgroud)