这听起来很奇怪:
$test_1 = 'string';
$test_2 = '0';
var_dump(intval($test_1)); // Output: int 0
var_dump(intval($test_2)); // Output: int 0
$can_cast = intval($test_2) ? 'sure' : 'nope'; // Wrong!!!
因此,string
到int
转化intval
会返回 0 。很好,但是当字符串实际上可以被转换为零(因为 0)时它也返回 0 ,因此有效。
如何区分两者(允许'0'作为字符串和拒绝'字符串')?
编辑:好吧,我说我知道我可以使用is_numeric
。 But is_numeric('2.3')
会返回true
,因此无法提供帮助。和
$test = '0';
var_dump(is_numeric($test) && intval($test)); // Fail!!!
答案 0 :(得分:8)
你可以在演出之前进行ctype_digit
检查(如果你只想要正数)。或者,您可以使用filter_var
和FILTER_VALIDATE_INT
进行整数验证。整数验证还将检查整数语义,即它将确保整数在允许的范围内。您还可以通过多种选项自定义它。