在PHP中,我可以区分intval(null)和intval(“0”)的结果吗?

时间:2012-10-12 08:13:04

标签: php

我通过POST获取输入值,其中一些可能是ID引用其他内容,有些则从0开始。当选择ID为0的内容或没有值的内容时,是否有类似{的方法{1}}在解析失败时会返回比intval()更有用的内容吗?或者我可以以某种方式区分0的结果与解析失败的结果?

示例:

intval()

3 个答案:

答案 0 :(得分:7)

您可以使用filter_var()功能来确定差异:

filter_var(null, FILTER_VALIDATE_INT);
// false

filter_var('0', FILTER_VALIDATE_INT);
// int(0)

您还可以添加标记以专门接受十六进制和八进制值,但我不建议您这样做。

顺便说一下,在变量来自$_POST的情况下,你也可以使用filter_input()

if (is_int($nr = filter_input(INPUT_POST, 'nr', FILTER_VALIDATE_INT))) {
    // $nr contains an integer
}

我在is_int()的结果上使用filter_input的原因是,当没有发布任何内容时,会返回null;使用is_int()防范此问题。

修改

如果问题实际上只是关于null vs '0',您只需比较$var !== null

if (!is_null($var)) {
    // $var is definitely not null
    // but it might also be an object, string, integer, float even, etc.
}

答案 1 :(得分:0)

您可以先检查一下它是否为数字:

is_numeric($val);

答案 2 :(得分:-2)

好的,现在去寻求解决方案。

preg_match('/^\d+$/','0') //is true

preg_match('/^\d+$/',NULL) //is false