我通過POST獲取輸入值,其中一些可能是ID指的是其他的東西,一些從0開始。當選擇ID爲0的東西或沒有值的東西時,是否有像intval()
這樣的方法返回更有用的東西比0
無法解析?或者我可以以某種方式區分intval()
的結果與解析失敗的結果?在PHP中,我可以從intval(「0」)中區分intval(null)的結果嗎?
例子:
echo intval(null); // 0
echo intval("0"); // 0
我通過POST獲取輸入值,其中一些可能是ID指的是其他的東西,一些從0開始。當選擇ID爲0的東西或沒有值的東西時,是否有像intval()
這樣的方法返回更有用的東西比0
無法解析?或者我可以以某種方式區分intval()
的結果與解析失敗的結果?在PHP中,我可以從intval(「0」)中區分intval(null)的結果嗎?
例子:
echo intval(null); // 0
echo intval("0"); // 0
可以使用filter_var()
函數來確定的區別:
filter_var(null, FILTER_VALIDATE_INT);
// false
filter_var('0', FILTER_VALIDATE_INT);
// int(0)
您還可以添加標誌,專門接受十六進制和八進制值,但我不會推薦爲你的情況。
順便說一下,在這個變量來自$_POST
更可能的情況下,你也可以使用filter_input()
:
if (is_int($nr = filter_input(INPUT_POST, 'nr', FILTER_VALIDATE_INT))) {
// $nr contains an integer
}
的原因,我對filter_input
結果使用is_int()
是因爲當沒有張貼,返回null
;使用is_int()
來防範這個問題。
編輯
如果問題真的只是null
VS '0'
你可以比較$var !== null
:
if (!is_null($var)) {
// $var is definitely not null
// but it might also be an object, string, integer, float even, etc.
}
要注意它使用了過濾器擴展(自PHP 5.2以來包含在php基本擴展中) –
當然,這並不能真正解決任何問題,因爲你現在必須區分'0'和'false' ... :) – Jon
is_int('0')爲假。 is_int(0)是真的。看到http://ideone.com/3XKKP –
你可以先檢查其數字:
is_numeric($val);
但不是int,所有數字(float也是) –
但是如果它是一個數字並且intval返回0,那麼您將知道該值爲0.如果它不是數字並且intval返回0,那麼您將知道它不是0 (如null) – Nin
好的,現在去找解決方案。
preg_match('/^\d+$/','0') //is true
preg_match('/^\d+$/',NULL) //is false
如何測試它們*之前*你將它們轉換爲不能爲空或字符串的值? :P表達式'null!== 0','「0」!== 0'和'「0」!== null'都是真的。 – cHao
一個簡單的'if($ val === null)'是你在這裏需要的。 – Jon
您可以使用PHP gettype函數。並比較它的NULL或INTEGER。如果引用將會是字符串。 http://php.net/manual/en/function.gettype.php – Dev