我有一个用户搜索关键字的表单。
我想检查用户是否提交了一个数字(整数)而不是关键字。
我用这个:
$keyword = $_REQUEST["keyword"];
if (is_int($keyword)) {
echo 'true';
} else {
echo 'false';
}
但即使提交的值是整数,它也始终返回false。
答案 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()
适用于您的情况。