php 检查变量是否为整数

2022-08-30 13:03:53

有没有更好的方法来做到这一点?

if( $_POST['id'] != (integer)$_POST['id'] )
    echo 'not a integer';

我试过了

if( !is_int($_POST['id']) )

但由于某种原因不起作用。is_int()

我的表单如下所示

<form method="post">
   <input type="text" name="id">
</form>

我已经研究过了,似乎如果is_int()

is_int('23'); // would return false (not what I want)
is_int(23);   // would return true

我也试过is_numeric()

is_numeric('23'); // return true
is_numeric(23); // return true
is_numeric('23.3'); // also returns true (not what I want)

看来唯一的办法就是:[这是不好的办法,不要做,见下面的注解]

if( '23' == (integer)'23' ) // return true
if( 23 == (integer)23 ) // return true
if( 23.3 == (integer)23.3 ) // return false
if( '23.3' == (integer)'23.3') // return false

但是有没有一个功能来做上述事情?


只是为了澄清,我想要以下结果

23     // return true
'23'   // return true
22.3   // return false
'23.3' // return false

注意:我刚刚弄清楚我之前提出的解决方案将对所有字符串返回true。(感谢红雷加)

$var = 'hello';
if( $var != (integer)$var )
    echo 'not a integer';

// will return true! So this doesn't work either.

这不是检查变量是否是PHP中的整数的副本,因为我对整数的要求/定义与那里不同。


答案 1

尝试ctype_digit

if (!ctype_digit($_POST['id'])) {
    // contains non numeric characters
}

注意:它仅适用于类型。因此,您必须转换为正常变量:stringstring

$var = 42;
$is_digit = ctype_digit((string)$var);

另请注意:它不适用于负整数。如果你需要这个,你必须使用正则表达式。例如,我发现了这个

编辑:感谢LajosVeres,我添加了D修饰符。所以是无效的。123\n

if (preg_match("/^-?[1-9][0-9]*$/D", $_POST['id'])) {
    echo 'String is a positive or negative integer.';
}

更多:使用强制转换的简单测试将不起作用,因为“php” == 0是,而“0” === 0是!请参阅类型比较表truefalse

$var = 'php';
var_dump($var != (int)$var); // false

$var = '0';
var_dump($var !== (int)$var); // true

答案 2

试用功能filter_var

filter_var($_POST['id'], FILTER_VALIDATE_INT);

用:

if(filter_var($_POST['id'], FILTER_VALIDATE_INT)) { 
    //Doing somethings...

}

推荐