PHP - filter_var REGEXP 找不到零
PHP - filter_var REGEXP won't find Zero
我想知道为什么我无法将数字零 => 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()
returns the filtered result. From the PHP manual:
Return Values
Returns the filtered data, or FALSE if the filter fails.
您实际上犯了与用户在 filter_var using FILTER_VALIDATE_REGEXP 中询问的错误相同的错误:该函数不验证输入,而是对其进行过滤。如果不匹配,它将 return FALSE
否则它将 return 过滤数据。如果将字符串 "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!
我想知道为什么我无法将数字零 => 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()
returns the filtered result. From the PHP manual:
Return Values
Returns the filtered data, or FALSE if the filter fails.
您实际上犯了与用户在 filter_var using FILTER_VALIDATE_REGEXP 中询问的错误相同的错误:该函数不验证输入,而是对其进行过滤。如果不匹配,它将 return FALSE
否则它将 return 过滤数据。如果将字符串 "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!