Лучший способ проверить положительное целое число (PHP)? - PullRequest
37 голосов
/ 30 января 2011

Мне нужно проверить, чтобы входное значение формы было положительным целым числом (не просто целым числом), и я заметил еще один фрагмент кода, используя следующий код:

$i = $user_input_value;
if (!is_numeric($i) || $i < 1 || $i != round($i)) {
  return TRUE;
}

Мне было интересно, есть ли какое-то преимуществоиспользовать три проверки выше, вместо того, чтобы делать что-то вроде этого:

$i = $user_input_value;
if (!is_int($i) && $i < 1) {
  return TRUE;
}

Ответы [ 20 ]

1 голос
/ 12 ноября 2015
if(preg_match('/^[1-9]\d*$/',$i)) {
   //Positive and > 0
}
1 голос
/ 30 января 2011
    preg_match('{^[0-9]*$}',$string))

и, если вы хотите ограничить длину:

    preg_match('{^[0-9]{1,3}$}',$string)) //minimum of 1 max of 3

Так что pisitive int с максимальной длиной 6:

    if(preg_match('{^[0-9]{1,6}$}',$string)) && $string >= 0)
1 голос
/ 31 июля 2014

Хорошо, я знаю, что эта ветка действительно старая, но я разделяю мнение @Jeffrey Vdovjak: так как мне удалось ее найти, она все равно может помочь кому-то еще.

php's gmp_sign () может быть еще одним простым способом проверки. Он работает для целочисленных и числовых строк и возвращает 1, если a положительно, -1, если a отрицательно, и 0, если a равно нулю.

Итак:

// positive
echo gmp_sign("500") . "\n";

// negative
echo gmp_sign("-500") . "\n";

// zero
echo gmp_sign("0") . "\n";

выведет:

1
-1
0

См. Руководство по функциям на http://php.net/manual/en/function.gmp-sign.php

P.S. Вам нужно включить php_gmp.dll в вашем файле .ini.

1 голос
/ 21 декабря 2013

Все эти ответы игнорируют тот факт, что запрашивающая сторона может проверять ввод формы.
Is_int () завершится ошибкой, потому что входная форма является строкой.
is_numeric () будет верно и для чисел с плавающей запятой.
Вот почему приходит $ i == round ($ i), поскольку он проверяет, является ли ввод целым числом.

1 голос
/ 20 декабря 2013

Для проверки на положительное целое число используйте:

$i = $user_input_value;
if (is_int($i) && $i > 0) {
  return true; //or any other instructions 
}

OR

$i = $user_input_value;
if (!is_int($i) || $i < 1) {
  return false; //or any other instructions 
}

Используйте тот, который соответствует вашей цели, поскольку они одинаковы. Следующие примеры демонстрируют разницу между is_numeric() и is_int():

is_numeric(0);     // returns true
is_numeric(7);     // returns true
is_numeric(-7);    // returns true
is_numeric(7.2);   // returns true
is_numeric("7");   // returns true
is_numeric("-7");  // returns true
is_numeric("7.2"); // returns true
is_numeric("abc"); // returns false

is_int(0);     // returns true
is_int(7);     // returns true
is_int(-7);    // returns true
is_int(7.2);   // returns false
is_int("7");   // returns false
is_int("-7");  // returns false
is_int("7.2"); // returns false
is_int("abc"); // returns false
1 голос
/ 30 января 2011

Вам на самом деле не нужно использовать все три проверки, и если вы хотите получить положительное целое число, вы можете сделать то, что указано в вашем коде:

if(is_numeric($i) && $i >= 0) { return true; }

Проверьте ответ Sören для получения дополнительной информации о разнице между is_int() и is_numeric()

0 голосов
/ 05 августа 2014

Это мое решение, надеюсь, поможет:

if (is_numeric($i) && (intval($i) == floatval($i)) && intval($i) > 0)
   echo "positive integer";

Я проверяю, является ли строка числовой, вторая проверка, чтобы убедиться, что она целочисленная, и третья, чтобы убедиться, что она положительная.

0 голосов
/ 31 июля 2014

Я бы сделал что-то вроде этого:

if ((int) $i > 0) {
    // this number is positive
}

Число получает тип приведенное к положительному или отрицательному числу в зависимости от того, что знак минус находится спереди.Затем сравнивает число типа передачи с большим, чем 0, чтобы определить, является ли число положительным.

0 голосов
/ 30 января 2011

Если вы используете «is_int», переменная должна быть целочисленной, поэтому она не может быть значением с плавающей точкой. (раунд не требуется).

0 голосов
/ 30 января 2011
if(isset($i) && is_int($i) && $i >= 0){ //0 is technically a postive integer I suppose
    return TRUE; //or FALSE I think in your case.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...