我可以使用intval
,但根据文档:
字符串很可能返回 0,尽管这取决于字符串最左边的字符。整数转换的通用规则适用。
...并且要解析的值可以是0
,也就是说我无法区分零和 a string
。
$value1 = '0';
$value2 = '15';
$value3 = 'foo'; // Should throw an exeption
真正的问题是:如何解析字符串并区分转换为的 astring
和0
零本身?
在下面的代码中,如果不是实际的数字字符串(基数为 10 和正数),$int_value
则将设置为,否则将设置为的整数值:null
$value
$value
$int_value = ctype_digit($value) ? intval($value) : null;
if ($int_value === null)
{
// $value wasn't all numeric
}
我没有针对 ctype_digit() 进行基准测试,但我认为以下是一个不错的选择。当然,这取决于您期望的确切行为。
function parseIntOrException($val) {
$int = (int)$val;
if ((string)$int === (string)$val) {
throw \Exception('Nope.');
}
return $int;
}
1 1
'2' 2
'3.0' false
4.0 4
5 5