【问题标题】:PHP intval() behaviour?PHP intval() 行为?
【发布时间】:2011-12-18 19:03:46
【问题描述】:

这对我来说听起来很奇怪:

$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'作为字符串并拒绝'字符串')?

编辑:好的,让我说我知道我可以使用is_numericBut is_numeric('2.3') 返回true,所以它无能为力。并且:

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

【问题讨论】:

  • is_numeric() 可能适合您?
  • '0.0''0.1''0foo' 怎么样?
  • @ÁlvaroG.Vicario 我已经编辑了问题,你明白了。
  • “失败!!!”是什么意思对于 is_numeric 示例?果然是假的吧?
  • intval 是一个转换,不是检查,所以它总是返回一个整数。因此,不可能从 intval 知道参数是否为整数 - 这不是为了那个。

标签: php string casting integer


【解决方案1】:

您可以在投射之前进行ctype_digit 检查(如果您只想要正数)。或者,您可以使用filter_varFILTER_VALIDATE_INT 进行整数验证。整数验证还将检查整数语义,即它将确保整数在允许的范围内。您还可以通过几个选项根据您的需要对其进行自定义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2011-11-16
    • 2014-12-31
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多