Проверка is_int, is_numeric, is_float и HTML-формы - PullRequest
5 голосов
/ 30 марта 2011

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

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

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

Ответы [ 7 ]

5 голосов
/ 30 марта 2011

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

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

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

4 голосов
/ 30 марта 2011

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

Другой способ гарантировать что-то целое - это привести его ...

$id = (int) $id;
1 голос
/ 17 января 2017

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

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

1 голос
/ 03 апреля 2011

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

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

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

0 голосов
/ 30 марта 2011

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

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

Это выведет "да".

0 голосов
/ 30 марта 2011

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

x = 457h
print (int)x

выводит 457

x = h56
print (int)x

вывод0

0 голосов
/ 30 марта 2011

Вы всегда можете привести его к типу int.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...