php验证整数

时间:2010-11-04 18:37:51

标签: php

我很奇怪为什么这不起作用

    echo gettype($_GET['id']); //returns string
  if(is_int($_GET['id']))
  {
   echo 'Integer';
  }

如果数据是整数,如何验证从GET / POST传递的数据?

7 个答案:

答案 0 :(得分:29)

可以使用

$validatedValue = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);

请参阅http://php.net/filter_input及相关功能。

答案 1 :(得分:25)

manual说:

  

测试变量是数字还是a   数字字符串(例如表单输入,   你必须这是一个字符串)   使用is_numeric()。

备选方案,您可以使用基于正则表达式的测试:

if(preg_match('/^\d+$/',$_GET['id'])) {
  // valid input.
} else {
  // invalid input.
}

答案 2 :(得分:3)

要将表单数据(字符串)验证为整数,您应该使用ctype_digit() 如果字符串文本中的每个字符都是十进制数字,则返回TRUE,否则返回FALSE。 (PHP 4> = 4.0.4,PHP 5)

参考:http://php.net/manual/en/function.ctype-digit.php

答案 3 :(得分:2)

intval怎么办?

$int = intval($_GET['id']);

答案 4 :(得分:1)

尝试:

if(isNumeric($_GET['id'])) {
    $cast_int = (int)$_GET['id'];
}

if(isset($cast_int)) {
    echo gettype($cast_int)."<br />\n";
    if(is_int($cast_int))
    {
        echo 'Integer'."<br />\n";
    }
} else {
    echo gettype($_GET['id'])." was passed<br />\n";
}

function isNumeric($numeric) {
    return preg_match("/^[0-9]+$/", $numeric);
}

答案 5 :(得分:0)

听起来您正在检查字符串是否包含整数,而不是该变量整数。如果是这样,你应该检查php的正则表达式(正则表达式)功能。它允许您检查字符串中非常特定的模式,以便根据任何条件对其进行验证。 (例如,如果它只包含数字字符)

这是php页面 http://php.net/manual/en/function.preg-match.php

这里是正则表达式的备忘单(制作$ pattern字符串) http://regexpr.com/cheatsheet/

答案 6 :(得分:-1)

我采取了一种稍微偏执的方法来消毒GET输入

function sanitize_int($integer, $min='', $max='')
{
  $int = intval($integer);
  if((($min != '') && ($int < $min)) || (($max != '') && ($int > $max)))
    return FALSE;
  return $int;
}

为了更安全,您可以先提取数字,然后运行上面的功能

function sanitize_paranoid_string($string, $min='', $max='')
{
  $string = preg_replace("/[^a-zA-Z0-9]/", "", $string);
  $len = strlen($string);
  if((($min != '') && ($len < $min)) || (($max != '') && ($len > $max)))
    return FALSE;
  return $string;
}

代码来自:http://libox.net