5

我通过POST获取输入值,其中一些可能是ID引用其他事物,并且某些启动为0.在选择具有ID 0的内容或没有值的其他东西时,有类似的方法intval(),返回比0失败更有用的方法解析?或者我可以以某种方式区分intval()解析失败的结果吗?

例子:

echo intval(null); // 0
echo intval("0");  // 0
4

3 回答 3

8

您可以使用该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()防护措施来解决这个问题。

编辑

如果问题真的只是nullvs'0'你可以比较$var !== null

if (!is_null($var)) {
    // $var is definitely not null
    // but it might also be an object, string, integer, float even, etc.
}
于 2012-10-12T08:14:26.853 回答
0

你可以先检查它是否是一个数字:

is_numeric($val);
于 2012-10-12T08:14:46.537 回答
-2

好的,现在去找解决方案。

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

preg_match('/^\d+$/',NULL) //is false
于 2012-10-12T08:19:28.697 回答