filter_var和验证整数值

4
我正在尝试验证我的变量是否为32位有符号整数。
我原以为可以使用filter_var()FILTER_VALIDATE_INT,但显然PHP对int的定义完全不同,即使是999999999999999999也能通过验证。
查看PHP文档后,没有具体说明。那么filter_var($var, FILTER_VALIDATE_INT)到底验证了什么?

你可能想看一下这个 Stack Overflow 链接:https://dev59.com/_HrZa4cB1Zd3GeqP5Kmy - Abhinav
4个回答

4

您可以为FILTER_VALIDATE_INT设置自己的限制:

$int = 999999999999999999;
$min = 1;
$max = 2147483647;

if (filter_var($int, FILTER_VALIDATE_INT, array("options"=>
    array("min_range"=>$min, "max_range"=>$max))) === false) {
    echo("Variable value is not within the legal range");
} else {
    echo("Variable value is within the legal range");
}
//This will output "Variable value is not within the legal range"

整数的最大值取决于系统:
在32位系统上:INT的最大值为2147483647
在64位系统上:INT的最大值为9223372036854775807
来源:http://www.w3schools.com/php/filter_validate_int.asp

1
我认为你的问题更多地与整数有关:
整数的大小取决于平台,尽管通常情况下最大值约为20亿(即32位有符号数)。64位平台通常具有约9E18的最大值,除了始终为32位的Windows。PHP不支持无符号整数。可以使用常量PHP_INT_SIZE确定整数大小,并使用常量PHP_INT_MAX确定最大值,自PHP 4.4.0和PHP 5.0.5以来。 FILTER_VALIDATE_INT允许将min_range和max_range作为选项传递。你应该使用它们。

0

我在使用FILTER_VALIDATE_INT的限制时也遇到了问题。经过一些试错测试,我发现在我的机器上魔法最大数字是899795648511。以下是我的测试结果:
enter image description here

编辑: 以上测试是通过在PHP脚本中硬编码测试值作为max_range数值来完成的。但是,将899795648511输入表单字段会生成一个错误消息,指出“必须是<= 2,147,483,647的整数”。这证实了dbruman和Magicprog.fr的帖子,即最大限制取决于32位/64位平台。


-1

您可以使用ctype_digit来检查它是否为整数。

默认情况下,PHP中整数的最大大小在0-2147483647范围内。

这也取决于您的平台,在32位平台上可以工作。

通常情况下是这样的。

if (ctype_digit(2147483647)) {
    echo 'integer';
}
if (!ctype_digit(2147483648)) {
    echo 'not an integer';
}
if (!ctype_digit(-2147483647)) {
    echo 'not an integer';
}

ctype_digit 的输入应该是一个 字符串。http://php.net/manual/en/function.ctype-digit.php - Anthony Rutledge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接