我想知道为什么我无法匹配数字零=> 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!
答案 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!