如何检查从文本输入返回的字符串值是否为整数


How to check if string value returned from text input is integer

我有一个表单,用户可以在其中搜索关键字。

我想检查用户是否提交了一个数字(整数)而不是关键字。

我使用这个:

$keyword = $_REQUEST["keyword"];
if (is_int($keyword)) {
  echo 'true';
} else {
  echo 'false';
}

但即使提交的值是整数,它也总是返回false。

is_int检查变量是否为整数类型。您所拥有的是一个字符串,其字符恰好表示一个整数。

尝试:

if (is_numeric($keyword) && is_int(0+$keyword))

0+将隐式地将以下内容转换为数字类型,因此如果可能的话,您最终会得到字符串的数值。首先调用is_numeric可以确保不会转换垃圾。

is_int()用于类型安全比较,因此从浏览器接收的字符串的计算结果始终为false

如果你真的需要检查一个变量是否是integer,你可以使用这个方便的函数:

function str_is_int($number) {
    // compare explicit conversion to original and check for maximum INT size
    return ( (int)$number == $number && $number <= PHP_INT_MAX );  
    // will return false for "123,4" or "123.20"
    // will return true for "123", "-123", "-123,0" or "123.0"
}

注意:您应该将PHP_INT_MAX替换为目标系统(例如数据库)的最大整数大小

<小时>

is_int()的文档中,您可以阅读以下内容:

is_int—查找变量的类型是否为整数

bool is_int ( mixed $var )

注意:

若要测试变量是数字还是数字字符串(例如表单输入,它始终是字符串),必须使用is_numeric()

示例:

<?php
if (is_int(23)) {
    echo "is integer'n";
} else {
    echo "is not an integer'n";
}
var_dump(is_int(23));
var_dump(is_int("23"));
var_dump(is_int(23.5));
var_dump(is_int(true));
?>

上面的例子将输出:

is integer
bool(true)
bool(false)
bool(false)
bool(false)

我认为ctype_digit()将适用于您的情况。