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