使用filter_var的PHP验证布尔值

时间:2012-02-03 16:51:01

标签: php validation boolean filter-var

我正在使用filter_var来验证布尔值,但我没想到它不会识别FALSE。为什么会这样?

filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)

返回

null

3 个答案:

答案 0 :(得分:5)

从PHP 5.2开始,

filter_var是新的。你遇到了一个已知的错误:https://bugs.php.net/bug.php?id=49510 随意投票或评论该错误。

你正试图做这样的事情:

$v = filter_var($v, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)

有许多廉价的解决方法是这样的:

$v = $v===FALSE ? FALSE : filter_var($v, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)

答案 1 :(得分:2)

听起来这实际上是它应该如何工作,奇怪的是(是的,我的思绪被吹得那么)。来自https://bugs.php.net/bug.php?id=51344

  

当你查看基础时,这听起来很疯狂   过滤代码,但这实际上是正确的   文档:filter_input()的默认行为是返回   对于不存在的输入为NULL,在验证失败时为false,以及   FILTER_NULL_ON_FAILURE只是将该行为翻转为false   验证失败时不存在的输入和NULL。 (不,我没有   一个线索,这将是有用的,并且标志的名称是   不幸的是在filter_input()上下文中,因为它暗示了NULL   通常不会被退回。使用时更有意义   filter_var(),它没有不存在的输入大小写。)

     

[由于SO格式而省略了表格]

     

我会在filter_input()和filter_input_array()中添加注释   实现要注意这是设计,即使代码   看起来有点不对劲。

     

结束不会修复。

答案 2 :(得分:0)

这是filter_var首次引入版本5.2并在5.4之后的某个时刻解决的行为,如此https://3v4l.org/Cv1MZ

所示

从版本5.4开始,这就是:

var_dump(filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
  

布尔(假)

更有意义。