【问题标题】:filter_var boolean returning falsefilter_var 布尔返回 false
【发布时间】:2014-11-13 11:18:14
【问题描述】:

这很奇怪

var_dump(filter_var(true, FILTER_VALIDATE_BOOLEAN));
var_dump(filter_var(false, FILTER_VALIDATE_BOOLEAN));

bool(true)
bool(false)

我在这里错过了什么?当然,它们都应该是真的吗?如果不是,我该如何验证假布尔值?

编辑:澄清。 我需要验证一个错误的布尔值。确保它不是字符串、int、float 或其他任何东西。 例如

$var = false; //true
$var = true; //true
$var = 'foo'; //false
$var = 1; //false

也许我问错了我的问题,或者我对它的改进太多了,我应该再问一个问题。

我的解决方案是:

$result = filter_var($bool, FILTER_VALIDATE_BOOLEAN) && ($bool===true||$bool===false);

【问题讨论】:

  • 您的问题到底是什么? manual 表示 FILTER_VALIDATE_BOOLEAN对于“1”、“true”、“on”和“yes”返回 TRUE。否则返回 FALSE。
  • 我的问题是:如何验证假布尔值?
  • 设置FILTER_NULL_ON_FAILURE?如有疑问,您可以返回严格比较 (return $x === true || $x === false)

标签: php boolean filter-var


【解决方案1】:

来自手册:-

如果设置了 FILTER_NULL_ON_FAILURE,则仅对“0”、“false”、“off”、“no”和“”返回 FALSE,对所有非布尔值返回 NULL。

设置此项,如果返回 null,则您没有布尔(或布尔)值。

例如:-

var_dump(filter_var(true, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
var_dump(filter_var(false, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
var_dump(filter_var(2, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));

See it working

不过,这里可能is_bool() 更合适。

【讨论】:

  • NULL 也会在 false 布尔值上返回。那么如何验证变量是否为假布尔值?
  • 不,如果您设置了 FILTER_NULL_ON_FAILURE,则仅为非布尔值(ish)返回 null。例如 1 将返回 null,但 0 将返回 false。
  • 太棒了!这就是我期望的 FILTER_VALIDATE_BOOLEAN 的输出。
猜你喜欢
  • 2017-11-23
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 2020-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多