2012-02-02 181 views
2

输入值我想要的输入Accpet头“真”或“假”而已,所以我试图用FILTER_VALIDATE_BOOLEAN要做到这一点,虚假的FILTER_VALIDATE_BOOLEAN

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

呼应的错误信息,但它不应该。

我该怎么做才对?

+5

''false''不是布尔值,它是一个字符串。 – BoltClock 2012-02-02 15:52:28

+0

在这种情况下,'false'应该只是'false',否则它将被视为一个字符串。 – Treffynnon 2012-02-02 16:05:34

+0

它仍然返回错误信息与'假'... – laukok 2012-02-02 16:14:24

回答

9

看一看手动​​

你的语法/用法是正确的。 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'" 
+0

感谢您的答案,马里奥! :) – laukok 2012-02-02 16:29:20

+1

虽然结论是错误的。您确实需要'=== NULL'来检查不正确的输入。 – mario 2012-02-02 16:32:31

+0

是的,我也注意到了! :-) – laukok 2012-02-02 16:44:51