PHP - filter_var REGEX赢得了#39;以找到Zero

时间:2015-01-01 19:56:59

标签: php regex preg-match zero filter-var

我想知道为什么我无法匹配数字零=> 0使用PHPs filter_var函数和PHPs preg_match它可以找到数字零。

有人可以帮助我如何使用 filter_var 或者这是一个错误吗?

代码段:

if(!filter_var("0", FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => '/^[0-9]+$/i')))) {
        print_r("NO MATCH!");
    } else {
        print_r("MATCH!");
    }

结果:没有比赛!

代码段:

if(preg_match('/^[0-9]+$/i', "0") == 0) {
    print_r("NO MATCH!");
} else {
    print_r("MATCH!");
}

结果: MATCH!

1 个答案:

答案 0 :(得分:1)

PHP函数filter_var()返回过滤后的结果。 From the PHP manual

  

返回值

     

返回过滤后的数据,如果过滤器失败,则返回FALSE。

你几乎犯了与用户在filter_var using FILTER_VALIDATE_REGEXP中提问的错误:该函数不验证输入,它会过滤它。如果它不匹配,它将返回FALSE否则它将返回过滤后的数据。这是字符串"0",如果将它转换为布尔值,则使用否定运算符(false)将其计算为!

因此您检查了:

if (!"0") {
    print_r("NO MATCH!");
} else {
    print_r("MATCH!");
}

它是什么。所以你输出约#34;匹配"但你"如果"关于价值本身,而不是匹配操作。

只需使用简单的变量赋值就可以编写更好的代码:

$var    = "0";
$result = filter_var($var, FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => '/^[0-9]+$/i')));

if (!$result) {
    print_r("NO MATCH!");
} else {
    print_r("MATCH!");
}

这样可以让您更轻松地进行故障排除和更改:

var_dump($result); // string(1) "0"

进一步说:

$var    = "0";
$result = filter_var($var, FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => '/^[0-9]+$/i')));

if ($var !== $result) {
    print_r("NO MATCH!");
} else {
    print_r("MATCH!");
}

您可能想早点写些什么。输出:

MATCH!