7

我希望输入只接受“真”或“假”,所以我试图用它FILTER_VALIDATE_BOOLEAN来做到这一点,

if (!filter_var('false', FILTER_VALIDATE_BOOLEAN)) 
{
    $error = true;
    echo 'error';
}

它回显错误消息,但不应该。

我怎样才能使它正确?

4

1 回答 1

24

看看手册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));

返回布尔值false

var_dump(filter_var('true', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));

返回布尔值true

var_dump(filter_var('wrong', FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));

退货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'"
于 2012-02-02T16:23:29.917 回答