Проверьте, является ли переменная натуральным числом - PullRequest
7 голосов
/ 03 июля 2011

Я хочу сделать систему ставок на сайте. Это означает, что пользователи могут разместить свою ставку (натуральное число). Я хочу убедиться, что пользователи не пытаются размещать символы, десятичные числа и т. Д. Я не хочу использовать функцию is_numeric, потому что разрешена шестнадцатеричная запись. Я думал использовать preg_match для этого. Но в php.net документации по этой функции немного, и я не знаю, как использовать preg_match.

Так как мне проверить, является ли переменная натуральным числом с preg_match?

Ответы [ 9 ]

12 голосов
/ 03 июля 2011

Если вам не нужны десятичные точки: ctype_digit или filter_var($var, FILTER_VALIDATE_INT).
Если вы делаете: filter_var($var, FILTER_VALIDATE_FLOAT).

5 голосов
/ 03 июля 2011

ctype_digit делает то, что вы хотите:

Проверяет, все ли символы в предоставленной строке text являются числовыми.

(До PHP 5.1.0 эта функция возвращала TRUE, когда текст был пустой строкой.)

1 голос
/ 21 мая 2015

Я знаю, что это очень старая версия, но я хотел бы поделиться следующим решением на случай, если кто-то еще столкнется с этой проблемой.

Я предполагаю, что под натуральным числом вы имели в виду положительное целое число (исключая число 0).

function is_positive_integer( $value ) {

    // Check if is integer and greater than zero
    if( is_int( $value ) && $value > 0 ) {
        return true;
    }

    // Is not a positive integer
    else {
        return false;
    }
}
1 голос
/ 03 июля 2011

Как правило, я бы предостерегал от использования регулярных выражений для анализа чисел, поскольку для этого обычно есть более подходящие решения, чем регулярные выражения, но поскольку вы спрашиваете, я постараюсь помочь вам с этим:

preg_match использует регулярные выражения (регулярные выражения) для сопоставления.

Подробнее о синтаксисе регулярных выражений можно узнать на таких сайтах, как http://www.regular -expressions.info /

Если вы хотите сопоставить цифру в регулярном выражении, вы можете использовать [0-9] или \d.

Если вы хотите сопоставить одно или несколько значений, вы должны использовать знак плюс.

Наконец, строки регулярных выражений должны быть заключены в пару символов.Выбранный символ обычно является символом косой черты (/), поскольку некоторые языки специально требуют этот символ, но PHP также позволяет использовать другие символы;тильда (~) довольно распространена.

Таким образом, ваша строка регулярного выражения, соответствующая любому количеству цифр, будет "/\d+/".Затем его можно поместить в вызов preg_match следующим образом:

$isnumeric = preg_match("/\d+/",$input_string);

Если у вас есть более конкретные требования, вы можете ограничить количество разрешенных символов, заменив знак плюс на {max} или * 1027.* где 'min' и 'max' - количество разрешений предыдущего совпадения.Таким образом, чтобы разрешить число от двух до шести цифр, вы должны использовать это:

$isnumeric = preg_match("/\d{2,6}/",$input_string);

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

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

$isnumeric = preg_match("/\d+\.\d\d/",$input_string);

Наконец, обратите внимание, что регулярное выражение вернет true во всех вышеперечисленных случаях, если строка просто содержит соответствующее значение.Чтобы убедиться, что он не содержит ничего другого, вам нужно «привязать» его к началу и концу строки, используя символы привязки: ^ для начала строки и $ для конца.

Так что для предыдущего примера, если вы хотите, чтобы only содержал десятичное число, и ничего больше, вам понадобится следующее:

$isnumeric = preg_match("/^\d+\.\d\d$/",$input_string);

Regex - этосложная тема, но я надеюсь, что это даст вам начало.

1 голос
/ 03 июля 2011

Либо preg_match('/^[0-9]+$/', $var);, либо ctype_digit

0 голосов
/ 20 мая 2019

С математической точки зрения натуральное число - это положительное целое число, , включая ноль , поэтому вы можете проверить это следующим образом:

is_int($bid) && $bid >= 0

0 голосов
/ 09 декабря 2013

простая функция:

function isnature($x){
$y = ceil($x)-floor($x);
return $y == 0 ? true : false;
}
0 голосов
/ 26 сентября 2013
in_array(str_replace(str_split('0123456789'), '', $s), array(',','.',''));
0 голосов
/ 03 июля 2011

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

Чтобы ответить на ваш вопрос о том, какрешите это с помощью preg_match:

Если вы хотите включить ноль, использовать preg_match довольно просто preg_match('^[0-9]+$', $input).Использование:

if (preg_match('^[0-9]+$', $input))
  // $input represents a non-negative numeric value
else
  // $input does not represent a non-negative numeric value

Если вы не хотите включать ноль, используйте preg_match('^[1-9][0-9]*$', $input):

if (preg_match('^[1-9][0-9]*$', $input))
  // $input represents a positive numeric value
else
  // $input does not represent a positive numeric value

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

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