我想知道为什么我不能将数字零 => 0 与 PHP filter_var函数和 PHP 匹配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!");
}
结果:匹配!
PHP 函数filter_var()
返回过滤结果。从 PHP 手册:
返回值
返回筛选的数据,如果筛选器失败,则返回 FALSE。
您实际上犯了与用户使用 FILTER_VALIDATE_REGEXP filter_var询问相同的错误:该函数不验证输入,而是对其进行过滤。如果不匹配,它将返回FALSE
否则将返回过滤后的数据。这就是字符串"0"
,如果您将其转换为布尔值,则在 PHP 中计算结果为 false
,这是通过使用否定运算符 (!
因此,您检查了:
if (!"0") {
print_r("NO MATCH!");
} else {
print_r("MATCH!");
}
就是这样。因此,您输出有关"匹配"的信息,但输出有关值本身的"如果",而不是匹配操作。
只需使用简单的变量赋值即可编写更好的代码:
$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!