Php validate integer
Я удивляюсь, почему это не работает
echo gettype($_GET['id']); //returns string
if(is_int($_GET['id']))
{
echo 'Integer';
}
Как проверить данные, передаваемые из GET/POST, если они являются целыми?
Ответы
Ответ 1
руководство говорит:
Чтобы проверить, является ли переменная числом или числовая строка (например, ввод формы, который всегда является строкой), вы должны используйте is_numeric().
Альтернативу вы можете использовать тест, основанный на регулярном выражении, как:
if(preg_match('/^\d+$/',$_GET['id'])) {
// valid input.
} else {
// invalid input.
}
Ответ 2
Можно использовать
$validatedValue = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
См. http://php.net/filter_input и связанные функции.
Ответ 3
Как насчет intval
?
$int = intval($_GET['id']);
Ответ 4
Чтобы проверить данные формы (string) как целое число, вы должны использовать ctype_digit()
Он возвращает TRUE
, если каждый символ в текстовом тексте является десятичной цифрой, FALSE
в противном случае.
(PHP 4 >= 4.0.4, PHP 5)
Ссылка: http://php.net/manual/en/function.ctype-digit.php
Ответ 5
Похоже, вы проверяете, содержит ли строка целое число, а не если эта переменная - целое число. Если это так, вы должны проверить функциональность php regex (регулярное выражение). Это позволяет вам проверять очень специфичные шаблоны в строке, чтобы проверить ее для любых критериев. (например, если он содержит только цифры)
Здесь php-страница
http://php.net/manual/en/function.preg-match.php
и здесь чит-лист на регулярных выражениях (чтобы сделать строку $pattern)
http://regexpr.com/cheatsheet/
Ответ 6
Попробуйте:
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);
}
Ответ 7
Я принимаю несколько более параноидальный подход к дезинфекции ввода 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