我想做一个基本的操作:检查字符串是否是一个数字。
这行不通:
$qty = $_REQUEST[qty];
if (is_int($qty) == FALSE) {
echo "error";
} else {
echo "ok";
}
$qty = 1;
if (is_int($qty) == FALSE) {
echo "error";
} else {
echo "ok";
}
$_REQUEST[qty]
与AJAX请求发布($.post). $_REQUEST[qty]
不是空的,只包含数字(1)。
is_numeric()
不会工作,因为它将1e4
视为数字。
is_int只在变量为整型时返回true。如果要测试变量是否包含一个表示数字的字符串,用途:
is_numeric("1");
来源:http://php.net/manual/en/function.is-int.php
编辑:使用ctype_digit()检查字符串中的每个字符是否为数字以排除"1e4"
如果只想检查数字是否存在,可以使用ctype_digit .
尝试"is_numeric()"而不是"is_int"…
我认为你从你的请求中得到一个字符串…is_int检查给定对象是否是整数。但它不是->它是一个字符串。
is_numeric只是检查对象是否可转换为整数。如果是,则返回true,否则返回false…
$qty = $_REQUEST[qty];
if (is_numeric($qty) == FALSE) {
echo "error";
} else {
echo "ok";
}
PS:使用$ _POST[]或$ _GET [] insetead $ _REQUEST [];)
您提到您不能使用is_numeric
,因为它将1e4
视为数字。1e4
是一个数字。特别是1 * 10^4
.
您可以使用is_int(intval($_REQUEST['qty']))
,但由于intval
总是返回int(失败时为0或空输入),因此您有误报的风险。但是,结合is_numeric
或filter_var
,您应该有相当坚实的基础。
实际上,所有的$_REQUEST(以及$_GET, $_POST等)值始终是字符串。
当$qty
是$_REQUEST[qty]
时,它是字符串,而不是整数。当$qty
为1
时,它已经是一个整数。
使用intval
函数将其转换为整数。但正如你所说,你只想知道它是否是整数,所以使用floatval
来转换它,然后检查它们是否相等:
if (intval($qty) == floatval($qty)) {
echo "Ok!";
} else {
echo "error";
}
在使用字符串和整数强制转换时进行不完全比较Docs
if ($qty !== (string)(int)$qty) {
echo "error";
} else {
echo "ok";
}
这基本上是文字:因为所有传入的变量都是字符串,所以你不能检查它们是否是整数,除非你将它们转换成整数,然后再转换回字符串。如果在内联代码中很难理解它的作用,则将其封装到函数中:
/**
* string is integer value?
*
* @return bool
*/
function is_int_string($string)
{
return $string === (string)(int)$string;
}
$qty = $_REQUEST[qty];
if (is_int_string($qty) == FALSE) {
echo "error";
} else {
echo "ok";
}
HTTP是文本协议,所以开头只有字符串
我决定使用preg_match()
if (!preg_match("/^[0-9]+$/", $_REQUEST[qty])) {}