PHP intval()行为?

时间:2011-12-18 19:03:46

标签: php string casting integer

这听起来很奇怪:

$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!!!

因此,stringint转化intval会返回 0 。很好,但是当字符串实际上可以被转换为零(因为 0)时它也返回 0 ,因此有效。

如何区分两者(允许'0'作为字符串和拒绝'字符串')?

编辑:好吧,我说我知道我可以使用is_numericBut is_numeric('2.3')会返回true,因此无法提供帮助。和

$test = '0';
var_dump(is_numeric($test) && intval($test)); // Fail!!!

1 个答案:

答案 0 :(得分:8)

你可以在演出之前进行ctype_digit检查(如果你只想要正数)。或者,您可以使用filter_varFILTER_VALIDATE_INT进行整数验证。整数验证还将检查整数语义,即它将确保整数在允许的范围内。您还可以通过多种选项自定义它。