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

时间:2012-02-23 16:16:13

标签: php

我有一个用户搜索关键字的表单。

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

我用这个:

$keyword = $_REQUEST["keyword"];

if (is_int($keyword)) {
  echo 'true';
} else {
  echo 'false';
}

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

3 个答案:

答案 0 :(得分:9)

is_int检查变量是否为整数 type 。你拥有的是一个字符串,其字符碰巧代表一个整数。

尝试:

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

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

答案 1 :(得分:4)

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替换为目标系统的最大整数大小 - 例如你的数据库。


in the docs of 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)

答案 2 :(得分:-1)

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