is_int, is_numeric, is_float и проверка формы HTML

Поле выбора в моей HTML-форме может давать от 1 до 5 (целые числа). Использование is_int отклоняет его каждый раз, потому что $_POST['rating'] рассматривается как строка.

После консультации с PHP Manual кажется, что is_numeric() && !is_float() – это правильный способ проверки целого числа в этом случае.

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

Solutions Collecting From Web of "is_int, is_numeric, is_float и проверка формы HTML"

Я бы использовал is_numeric() , потому что пользовательский ввод всегда приходит как строка (насколько я знаю).

Другим способом гарантировать что-то является целое число – это бросить его …

 $id = (int) $id; 

Я бы, вероятно, использовал что-то вроде этого:

 $value = filter_var( $_POST['rating'], FILTER_VALIDATE_INT, array('options' => array('min_range' => 1, 'max_range' => 5))); 

filter_var() возвращает либо логическое значение false если значение нецелое или вне диапазона, либо действительное значение (как целое число).

Вы всегда можете использовать его как int.

 $rating = (int)$_POST['rating']; 

Это устранит необходимость его проверки (хотя вы всегда должны проверять данные формы). Это может уменьшить ваши шаги, к чему я иду.

Если вы тестируете только цифры (что обычно является целым числом;)), я предпочитаю использовать ctype_digit вместо is_int. Таким образом, вы не потеряете данные с помощью кастинга, и вы можете просто использовать строку:

 <?php $_POST['foo'] = '42'; echo ctype_digit( (string) $_POST['foo'] ) ? 'yep' : 'nope'; 

Это выведет «yep».

Вы можете использовать следующее регулярное выражение:

 preg_match('/^[0-9]{1,}$/', $value); 

Я проверяю цифры с ведущими нулями, хотя …

если вы хотите узнать, является ли $_POST['rating'] int, прежде чем вы даже попытаетесь сделать бросок, используйте is_numeric() && !is_float() как у вас. Это скажет вам, является ли строка int или нет. Если вы просто передаете int и есть числовое число всех чисел до того, как первая буква в строке будет преобразована в int.

 x = 457h print (int)x 

выходы 457

 x = h56 print (int)x 

выходы 0

is_int требует, чтобы входной контент был целым числом. is_numeric требует, чтобы входной контент был целым числом или строкой, содержащей только 0-9 .

но мне интересно результат, если я поместил число, которое больше, чем PHP_INT_MAX в качестве параметра в вышеуказанные 2 функции.