这听起来很奇怪:
$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'作为字符串和拒绝'字符串')?
EDIT:好吧,让我说我知道我可以使用is_numeric
。But is_numeric('2.3')
返回true
,所以它没有帮助。和:
$test = '0';
var_dump(is_numeric($test) && intval($test)); // Fail!!!
您可以在强制转换之前做ctype_digit
检查(如果您只想要正数)。或者,您可以使用filter_var
和FILTER_VALIDATE_INT
进行整数验证。整数验证还将检查整数语义,即它将确保整数在允许的范围内。