这个preg_match发生了什么?

时间:2012-10-12 00:38:32

标签: php regex

      $var = 3;
        if ($cleanvar = preg_match('/^[0-9]{0,2}$/', $var)) 
            {
                echo $cleanvar; echo $var; exit();
            }
        else
              . . .

奇怪的输出。这导致我的cleanvar回显1,而var仍然回显3。为什么会这样?此regex的要点是仅匹配整数,即1或2位数。例如(1,2,4,38,24)

他们在我的正则表达式中存在问题吗?或者是什么导致了这种奇怪的行为?

4 个答案:

答案 0 :(得分:3)

$cleanvar只是真或假。你正在寻找一个0到2位数字的数字(从字符串的开头到结尾,所以不允许其他字符。)

编辑:如果匹配则返回1,否则返回0.

有关详情,请参阅此处:http://us3.php.net/preg_match

答案 1 :(得分:0)

如果你想设置它,

$var后面应该跟一个数组。如果匹配> = 1,您可能希望更改为{1,2}

答案 2 :(得分:0)

你的正则表达式是正确的,它匹配正确。只是如果你得到一个匹配,preg_match返回1,如果没有,则返回0。请参阅documentation.

答案 3 :(得分:0)

如果您尝试验证输入值,则只需查看preg_match的返回值。使用+运算符匹配“前面一个或多个元素。”

if (preg_match('/^[0-9]+$/', $var)) {
    // we matched a number only, so we know $var is clean
} else {
}

如果需要从输入字段中提取数字,可以使用捕获组:

if (preg_match('/([0-9]+)/', $var, $matches)) {
    $num = $matches[1];
} else {
}

请注意,这与整个输入不匹配,但会返回它在输入$var中找到的第一个数字。