Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式匹配PHP中的非负整数?_Php_Regex - Fatal编程技术网

正则表达式匹配PHP中的非负整数?

正则表达式匹配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-

我似乎通过以下方式使其与以下regexp一起工作:

但奇怪的是,它与
-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.