13

私は使用できますintvalが、ドキュメントによると:

文字列はほとんどの場合0を返しますが、これは文字列の左端の文字によって異なります。整数キャストの一般的なルールが適用されます。

...そして解析する値はである可能性があります0。つまり、ゼロと。を区別することはできませんstring

$value1 = '0';
$value2 = '15';
$value3 = 'foo'; // Should throw an exeption

string本当の問題は、文字列を解析して、キャスト先0とゼロ自体を区別するにはどうすればよいかということです。

4

2 に答える 2

15

以下のコードでは、$int_valueが実際の数値文字列(基数10および正)でないnull場合$valueはに設定され、そうでない場合は次の整数値に設定されます$value

$int_value = ctype_digit($value) ? intval($value) : null;
if ($int_value === null)
{
    // $value wasn't all numeric
}
于 2012-11-21T21:33:30.933 に答える
0

私はctype_digit()に対してベンチマークを行っていませんが、以下は良いオプションだと思います。もちろん、それはあなたが期待する正確な振る舞いに依存します。

function parseIntOrException($val) {
  $int = (int)$val;
  if ((string)$int === (string)$val) {
    throw \Exception('Nope.');
  }
  return $int;
}

http://3v4l.org/Tf8nh

1       1
'2'     2
'3.0'   false
4.0     4
5       5
于 2014-11-26T17:45:50.630 に答える