Как проверить, является ли переменная в $ _GET Array целым числом?

У меня есть такая страница:

http://sitename/gallery.php?page=2

Внизу есть ссылки на страницы, по которым мы можем просматривать. Каждый раз, когда номера страниц нажимаются, он отправляет запрос GET с параметрами page = 1 или page = 2 и так далее …

Когда я храню эти значения в $page из переменной $_GET , это строковое значение. Я могу преобразовать его в целое число с помощью (int) следующим образом:

 if(!empty($_GET['page'])){ $page = (int)$_GET['page']; echo "Page Number: ".$page; } 

Но как я могу убедиться, что переданное значение является целым числом, а не другим дерьмом?

Использование фильтров:

 if (null !== ($page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, FILTER_NULL_ON_FAILURE))) { // $page is now an integer } 

Это также проверяет, появляется ли переменная в строке запроса одновременно. Если вы хотите различать отсутствующие и недействительные, вы должны оставить последний аргумент filter_input() :

 $page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT); // $page can be null (not present), false (present but not valid) or a valid integer 

Используйте filter_var() с фильтром FILTER_VALIDATE_INT на нем и проверьте возвращаемое значение.

Используйте is_numeric () .

is_int() не будет работать, потому что параметры GET всегда являются строками.

Я оставил несколько комментариев здесь и там. Благодаря слабой типизации функции типа empty и isset имеют тенденцию быть ненадежными. Самый быстрый способ проверить, является ли параметр int или нет IMO, будет следующим:

 if (array_key_exists('page',$_GET) && ($_GET['page'] == (int) $_GET['page'])) 

Приведение к int и последующее сравнение соответствующих значений вернет true, только если $_GET['page'] является допустимым int. Если вы хотите использовать строгое сравнение типов по какой-либо причине (некоторые делают), вы можете выполнить двойное нажатие:

 if (array_key_exists('page',$_GET) && ($_GET['page'] === (string)((int) $_GET['page']))) 

Но в этом конкретном случае я не могу понять, почему вы хотели бы сделать это

это способ проверки параметра, если он является intetger или нет.

 if (is_int((int) $_GET['user_id']) && (int) $_GET['user_id'] != 0) { $user_id = $_GET['user_id']; } 

Использование is_int , вероятно, не поможет. Все входящие параметры (включая $ _GET и $ _POST) анализируются как строки PHP. Функция is_int проверяет тип данных, а не значение. ctype_digit проверяет только цифры:

 if(isset($_GET['page']) && ctype_digit($_GET['page']){ $page = (int)$_GET['page']; echo "Page Number: ".$page; } 
 if(!empty($_GET['page']) and is_numeric($_GET['page'])){ $page = (int)$_GET['page']; echo "Page Number: ".$page; } 

is_numeric , вероятно, то, что вам нужно.

Вы также можете проверить

 isNAN($_GET['something']);//is_numeric($_GET['something']) 

он возвращает логическое значение (true, flase) …. если его true, то это не целое число, если false его целое число.

 if (isset($_GET['page']) && (($get_page_filtered = filter_var($_GET['page'], FILTER_VALIDATE_INT)) !== FALSE) { $get_page_int = $get_page_filtered; } 

@see https://stackoverflow.com/a/41868665/6758130