我正在编写PHP代码来验证用户输入的一些数据,其中之一是整数,我使用$_REQUEST["age"]
来获取它,当我用gettype($_REQUEST["age"]) == "integer"
和is_int($_REQUEST["age"])
检查这个值是否为整数时,两者都返回false,但是当我使用is_numeric($_REQUEST["age"])
时返回true。我想要检查参数的值是否为整数,我是否正确使用了前两个函数,还是我漏掉了什么?
谢谢
注意:我尝试输出gettype($_REQUEST["age"])
,它给我返回string
雷雷
简短版本:
使用
ctype_digit($_REQUEST['age'])
详细版本:
你的问题是,当你使用
gettype
时,$_REQUEST
返回一个字符串。即使该字符串在语义上是一个整数,比如16
,它仍然是一个字符串类型,而不是整数类型的变量。你从这两个测试中得到不同的结果是因为它们测试的是不同的东西:is_numeric
测试一个字符串是否包含一个"可选符号、任意数量的数字、可选的小数部分和可选的指数部分",根据PHP文档。在你的情况下,该字符串只包含数字,所以测试返回True
。is_int
测试变量的类型是否为整数 - 但它不会是整数,因为它是由$_REQUEST
返回的。这就是为什么
is_numeric
返回True
而is_int
返回False
的原因:该字符串只包含数字(所以是"numeric"),但在技术上仍然是一个字符串类型,而不是整数类型(所以不是"int")。当然,is_numeric
对于整数测试来说是不够的,因为如果字符串有小数或使用科学计数法,它将返回True
,即是数字但不是整数。为了测试
$_REQUEST
是否为整数,无论技术类型如何,你可以测试字符串中的所有字符是否都是数字(因此整个字符串是一个整数)。为此,你可以使用ctype_digit:这将对
16
返回True
,但对16.5
或16e0
不返回True
- 这样就可以将整数从非整数的数字中筛选出来。