FILTER_VALIDATE_BOOLEAN的输入值为false

lau*_*kok 3 php boolean filter-var

我希望输入仅仅是'true'或'false',所以我试图用FILTER_VALIDATE_BOOLEAN它来做,

if (!filter_var('false', FILTER_VALIDATE_BOOLEAN)) 
{
    $error = true;
    echo 'error';
}
Run Code Online (Sandbox Code Playgroud)

它回应了错误消息,但它不应该.

我怎么能做对的?

mar*_*rio 15

请查看手册http://www.php.net/manual/en/filter.filters.validate.php

您的语法/用法是正确的.filter_var('false', FILTER_VALIDATE_BOOLEAN)但是不验证模式,它将输入字符串转换为相应的类型值.

为了明确:

var_dump(filter_var('false', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
Run Code Online (Sandbox Code Playgroud)

返回布尔值false
.

var_dump(filter_var('true', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
Run Code Online (Sandbox Code Playgroud)

返回布尔值true
.

var_dump(filter_var('wrong', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
Run Code Online (Sandbox Code Playgroud)

退货NULL.
这就是我添加第二个选项的原因.输入字符串既不分类true也不分类false.

所以你实际上必须检查=== NULL你的病情.这会给你你想要的结果:

if (filter_var('false', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) === NULL) 
{
    echo "Input did not evaluate to boolean 'false' nor 'true'"
Run Code Online (Sandbox Code Playgroud)