php检查变量是否为整数

Ari*_*osh 34 html php validation

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

if( $_POST['id'] != (integer)$_POST['id'] )
    echo 'not a integer';
Run Code Online (Sandbox Code Playgroud)

我试过了

if( !is_int($_POST['id']) )
Run Code Online (Sandbox Code Playgroud)

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

我的表格看起来像这样

<form method="post">
   <input type="text" name="id">
</form>
Run Code Online (Sandbox Code Playgroud)

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

is_int('23'); // would return false (not what I want)
is_int(23);   // would return true
Run Code Online (Sandbox Code Playgroud)

我也试过了 is_numeric()

is_numeric('23'); // return true
is_numeric(23); // return true
is_numeric('23.3'); // also returns true (not what I want)
Run Code Online (Sandbox Code Playgroud)

似乎这样做的唯一方法是: [这是一种不好的方式,不要这样做,请参阅下面的注释]

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
Run Code Online (Sandbox Code Playgroud)

但是有一个功能可以做到吗?


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

23     // return true
'23'   // return true
22.3   // return false
'23.3' // return false
Run Code Online (Sandbox Code Playgroud)

注意:我刚刚想出我之前提出的解决方案将为所有字符串返回true.(感谢redreggae)

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

// will return true! So this doesn't work either.
Run Code Online (Sandbox Code Playgroud)

这不是重复检查变量是否是PHP中的整数,因为我的整数的要求/定义不同于theres.

bit*_*ing 54

试试ctype_digit

if (!ctype_digit($_POST['id'])) {
    // contains non numeric characters
}
Run Code Online (Sandbox Code Playgroud)

注意:它只适用于string类型.所以你必须强制转换为string常规变量:

$var = 42;
$is_digit = ctype_digit((string)$var);
Run Code Online (Sandbox Code Playgroud)

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

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

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

更多:使用强制转换的简单测试不起作用,因为"php"== 0是true和"0"=== 0是false!请参阅类型比较表.

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

$var = '0';
var_dump($var !== (int)$var); // true
Run Code Online (Sandbox Code Playgroud)

  • @aaron这是正确的,需要输入一个字符串.幸运的是,在$ _POST`值的情况下,它们总是字符串. (3认同)
  • `$ integer = 42; ctype_digit($ integer);`将返回false (2认同)

IT *_*ogs 15

尝试filter_var功能

filter_var($_POST['id'], FILTER_VALIDATE_INT);
Run Code Online (Sandbox Code Playgroud)

使用:

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

}
Run Code Online (Sandbox Code Playgroud)


Séb*_*ien 8

在PHP中,$_POST值始终是文本(string类型).

您可以将变量强制转换为整数类型,如下所示:

$int_id = (int)$_POST['id'];
Run Code Online (Sandbox Code Playgroud)

如果你确定它$_POST['id'] 应该是一个整数,这将有效.但是,如果你要绝对确保它包含只有数字,从09,没有其他标志或符号使用:

if( ctype_digit( $_POST['id'] ) )
{
  $int_id = (int)$_POST['id'];
}
Run Code Online (Sandbox Code Playgroud)