验证$ _REQUEST内容是否为int

时间:2012-01-02 13:41:40

标签: php ajax

我正在尝试进行基本操作:检查字符串是否为数字。

这不起作用:

$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视为一个数字。

7 个答案:

答案 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_numericfilter_var,你应该有相当坚实的基础。

答案 4 :(得分:2)

使用字符串和整数强制转换时执行not-identical comparison­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是一种文本协议,因此开头只有字符串。

答案 5 :(得分:2)

实际上,所有$ _REQUEST(以及$ _GET,$ _POST等)值始终为字符串

$qty$_REQUEST[qty]时,它是一个字符串,而不是整数。当$qty1时,它已经是整数。

使用intval函数将其转换为整数。但正如你所说,你只想知道它是否是一个整数,所以用floatval来转换它,然后检查它们是否相等:

if (intval($qty) == floatval($qty)) {
     echo "Ok!";
} else {
     echo "error";
}

答案 6 :(得分:0)

我决定选择preg_match()。

if (!preg_match("/^[0-9]+$/", $_REQUEST[qty])) {}