我很奇怪为什么这不起作用
echo gettype($_GET['id']); //returns string
if(is_int($_GET['id']))
{
echo 'Integer';
}
如果数据是整数,如何验证从GET / POST传递的数据?
答案 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)
答案 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