PHP FILTER_VALIDATE_INT函数问题:传入0时返回错误而非成功
解决FILTER_VALIDATE_INT验证0时返回错误的问题
这问题我之前也踩过坑,本质是PHP的松散类型判断在搞怪!
问题原因
当你传入0给FILTER_VALIDATE_INT时,函数其实是验证通过的,它会返回0这个合法的整数值。但PHP的if()语句在做松散比较时,会把0、空字符串、null等都视为布尔值false,所以你的代码会错误地走进else分支输出error。
解决方案
正确的做法是严格判断返回值是否为false——因为只有当验证完全失败时,filter_var才会返回false,合法的整数(包括0)都会返回对应的整数值。
修正后的代码如下:
$delivery = 0; if (filter_var($delivery, FILTER_VALIDATE_INT) !== false) { echo 'ok'; } else { echo 'error'; }
你也可以先把验证结果存起来,这样代码可读性更好:
$delivery = 0; $validatedDelivery = filter_var($delivery, FILTER_VALIDATE_INT); if ($validatedDelivery !== false) { echo 'ok'; } else { echo 'error'; }
这样修改后,0就能被正确识别为合法整数,输出ok啦~
内容的提问来源于stack exchange,提问作者M.J
相关产品推荐
相关产品推荐

