【问题标题】:How to correctly parse an integer in PHP?如何正确解析 PHP 中的整数?
【发布时间】:2012-11-21 21:30:04
【问题描述】:

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

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

...解析的值可以是0,也就是说我无法区分零和string

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

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

【问题讨论】:

  • 你需要保守到什么程度? intval 工作正常,但如果您希望字符串包含非数字值并且您需要保留数字值,您需要先通过 preg_replace 运行它。
  • @cale_b 字符串应该是所有要转换的数字。

标签: php casting int


【解决方案1】:

在下面的代码中,如果 $value 不是实际的数字字符串(以 10 为底和正数),$int_value 将被设置为 null,否则它将被设置为 $value 的整数值:

$int_value = ctype_digit($value) ? intval($value) : null;
if ($int_value === null)
{
    // $value wasn't all numeric
}

【讨论】:

    【解决方案2】:

    我没有针对 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
    

    【讨论】:

      猜你喜欢
      • 2020-12-15
      • 1970-01-01
      • 2016-07-18
      • 2012-01-14
      • 1970-01-01
      • 2015-10-13
      • 2021-12-30
      • 1970-01-01
      • 2021-08-13
      相关资源
      最近更新 更多