3

我正在编写 php 代码来验证用户输入的一些数据,其中一个是整数,我曾经$_REQUEST["age"]得到它,当我检查这个值是否是整数时gettype($_REQUEST["age"] == "integer"is_int($_REQUEST["age"])两者都给我 false,但是当我使用时is_numeric($_REQUEST["age"])给出我是真的。我想检查参数的值是否为整数,我是否正确使用了前 2 个函数或者我错过了什么?

塔肯

注意:我试图输出gettype($_REQUEST["age"])它给了我string

4

2 回答 2

7

简洁版本:

采用ctype_digit($_REQUEST['age'])

长版:

正如您在使用时发现的那样,您的问题gettype$_REQUEST返回一个字符串。即使该字符串在语义上是整数,例如16,它仍然是字符串类型而不是整数类型变量。你从这两个测试中得到不同的结果,因为它们测试不同的东西:

  • is_numeric根据PHP 文档测试字符串是否包含“可选符号、任意位数、可选小数部分和可选指数部分” 。在您的情况下,字符串仅包含数字,因此测试返回True.
  • is_int测试变量的类型是否为整数——它不会是,因为它是由$_REQUEST.

这就是为什么在is_numeric返回Trueis_int返回False:字符串只包含数字(因此“是数字”),但在技术上仍然具有字符串类型,而不是整数类型(因此“不是 int”)。当然,is_numeric对于整数测试是不够的,因为True如果字符串有小数或使用科学记数法,它会返回,即是数字但不是整数。

要测试是否$_REQUEST是整数,无论​​技术类型如何,您都可以测试字符串中的所有字符是否都是数字(因此整个字符串是整数)。为此,您可以使用ctype_digit

ctype_digit($_REQUEST['age'])

这将返回Truefor16但不是 for 16.5or 16e0- 从数字非整数中剔除整数。

于 2013-03-16T11:00:03.560 回答
0
<?
     if(intval($_REQUEST["age"]) > 0):
        echo 'Ineger';
     else:
        echo 'something else';
     endif;
?>
于 2013-03-16T10:54:30.723 回答