Поле выбора в моей HTML-форме может давать от 1 до 5 (целые числа). Использование is_int
отклоняет его каждый раз, потому что $_POST['rating']
рассматривается как строка.
После консультации с PHP Manual кажется, что is_numeric() && !is_float()
– это правильный способ проверки целого числа в этом случае.
Но я хочу быть уверенным, поэтому, пожалуйста, подтвердите или погасите мою логику.
Я бы использовал 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 функции.