我正在尝试进行基本操作:检查字符串是否为数字。
这不起作用:
$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";
}
使用AJAX请求发布 $_REQUEST[qty]
($.post). $_REQUEST[qty]
不为空并且仅包含数字(1)。
is_numeric()
不起作用,因为它将1e4
视为一个数字。
答案 0 :(得分:6)
如果变量是整数类型,则is_int仅返回true。 如果您尝试测试变量是否包含表示数字的字符串, 使用方法:
is_numeric("1");
来源:http://php.net/manual/en/function.is-int.php
修改强>
使用ctype_digit()检查字符串中的每个字符,如果它是一个排除“1e4”的数字
答案 1 :(得分:4)
如果您只想检查是否存在数字,可以使用ctype_digit。
答案 2 :(得分:2)
尝试“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 []而不是$ _REQUEST [];)
答案 3 :(得分:2)
您提到不能使用is_numeric
,因为它会将1e4
视为一个数字。好吧,1e4
是一个数字。具体来说是1 * 10^4
。
您可以使用is_int(intval($_REQUEST['qty']))
,但由于intval
始终返回int(失败时为0或空输入),因此存在误报风险。但是,结合is_numeric
或filter_var
,你应该有相当坚实的基础。
答案 4 :(得分:2)
使用字符串和整数强制转换时执行not-identical comparisonDocs:
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是一种文本协议,因此开头只有字符串。
答案 5 :(得分:2)
实际上,所有$ _REQUEST(以及$ _GET,$ _POST等)值始终为字符串。
当$qty
为$_REQUEST[qty]
时,它是一个字符串,而不是整数。当$qty
为1
时,它已经是整数。
使用intval
函数将其转换为整数。但正如你所说,你只想知道它是否是一个整数,所以用floatval
来转换它,然后检查它们是否相等:
if (intval($qty) == floatval($qty)) {
echo "Ok!";
} else {
echo "error";
}
答案 6 :(得分:0)
我决定选择preg_match()。
if (!preg_match("/^[0-9]+$/", $_REQUEST[qty])) {}