这对我来说听起来很奇怪:
$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”作为字符串和拒绝“字符串”)?
编辑:好的,让我说我知道我可以使用
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
进行整数验证。整数验证还将检查整数语义,即它将确保整数在允许的范围内。您还可以通过几个选项自定义它。
关于php - PHP intval()行为?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8554050/