簡體   English   中英

使用filter_var的PHP驗證布爾值

[英]PHP validation booleans using filter_var

我正在使用filter_var來驗證布爾值,但我沒想到它不能識別FALSE 為什么會這樣?

filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)

回報

null

filter_var是PHP 5.2的新版本。 您遇到了一個已知的錯誤: https//bugs.php.net/bug.php? id = 49510隨意投票或評論該錯誤。

你正試圖做這樣的事情:

$v = filter_var($v, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)

有許多廉價的解決方法,如下所示:

$v = $v===FALSE ? FALSE : filter_var($v, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)

聽起來這實際上是它應該如何工作,奇怪的是(是的,我的思緒被吹得那么)。 來自https://bugs.php.net/bug.php?id=51344

當您查看底層過濾器代碼時,這聽起來很瘋狂,但根據文檔,這實際上是正確的:filter_input()的默認行為是為不存在的輸入返回NULL,並在驗證失敗時返回false,並且對於不存在的輸入,FILTER_NULL_ON_FAILURE簡單地將該行為翻轉為false,並在驗證失敗時將該行為翻轉為NULL。 (不,我也不知道哪個也有用,並且在filter_input()上下文中標志的名稱是不幸的,因為它暗示通常不會返回NULL。使用時更有意義使用filter_var(),它沒有不存在的輸入大小寫。)

[由於SO格式化而省略了表格]

我將在filter_input()和filter_input_array()實現中彈出注釋,注意這是設計的,即使代碼看起來有點錯誤。

關閉不會修復。

這是filter_var最初在5.2版本中引入並在5.4之后的某個時刻解決的行為,如此https://3v4l.org/Cv1MZ所示

從版本5.4開始,這是發生的事情:

var_dump(filter_var(FALSE, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));

布爾(假)

這更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM