2012-02-02 183 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