如何在PHP中正确解析整数?

如何在PHP中正确解析整数?,php,casting,int,Php,Casting,Int,我可以使用intval,但根据文档: 字符串很可能返回0,尽管这取决于 字符串最左边的字符。整数转换的一般规则 申请 。。。要解析的值可以是0,也就是说,我无法区分零和字符串 $value1='0'; $value2='15'; $value3='foo';//应该抛出一个例外 真正的问题是:如何解析字符串并区分转换为0的字符串和零本身?在下面的代码中,如果$value不是实际的数字字符串(以10为基数和正数),则$int\u value将设置为null,否则,它将被设置为整数值$value:

我可以使用
intval
,但根据文档:

字符串很可能返回0,尽管这取决于 字符串最左边的字符。整数转换的一般规则 申请

。。。要解析的值可以是
0
,也就是说,我无法区分零和
字符串

$value1='0';
$value2='15';
$value3='foo';//应该抛出一个例外

真正的问题是:如何解析字符串并区分转换为
0
字符串和零本身?

在下面的代码中,如果
$value
不是实际的数字字符串(以10为基数和正数),则
$int\u value
将设置为
null
,否则,它将被设置为整数值
$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;
}


你需要多保守?intval工作正常,但如果您希望字符串包含非数值,并且需要保留数值,则需要先通过preg_替换运行该字符串。@cale_b字符串应全部为数值才能强制转换。
1       1
'2'     2
'3.0'   false
4.0     4
5       5