filter_var and validating integer values

时间:2015-06-26 10:24:57

标签: php

I'm trying to validate if my variable is a 32-bit signed integer.

I thought I could use filter_var() and FILTER_VALIDATE_INT but apparently PHPs definition of an int is something entirely different, 999999999999999999 passes without problem.

Looking at the PHP docs it dosn't say anything specific. So what actually does filter_var($var, FILTER_VALIDATE_INT) validate?

4 个答案:

答案 0 :(得分:2)

您可以为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"

来源:http://www.w3schools.com/php/filter_validate_int.asp

整数最大大小取决于系统:

<{1>}上的

:INT max将为32-bit system

<{1>}上的

:INT max将为2147483647

答案 1 :(得分:1)

我认为你的问题更多地出现在integer

  

整数的大小取决于平台,尽管最大值约为20亿是通常的值(32位签名)。 64位平台的最大值通常约为9E18,Windows除外,它总是32位。 PHP不支持无符号整数。整数大小可以使用常量PHP_INT_SIZE来确定,最大值可以使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX来确定。

FILTER_VALIDATE_INT允许将min_range和max_range作为选项传递。你应该使用那些。

答案 2 :(得分:0)

在使用FILTER_VALIDATE_INT的限制时,我也遇到了问题。经过一番反复试验后,我的机器上得出的最大魔术数为899795648511。这是我的测试结果:
enter image description here

编辑: 通过将测试值作为max_range数字硬编码到PHP脚本中来完成上述测试。但是,在表单字段中输入899795648511会导致生成错误消息,提示“必须为整数<= 2,147,483,647”。因此,这证实了dbruman和Magicprog.fr的帖子,最大限制由32位/ 64位平台确定。

答案 3 :(得分:-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';
}