Intereting Posts

Проверьте, является ли переменная натуральным числом

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

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

Solutions Collecting From Web of "Проверьте, является ли переменная натуральным числом"

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

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

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

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

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

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

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

Вы можете узнать больше о синтаксисе regex на таких сайтах, как http://www.regular-expressions.info/

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

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

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

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

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

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

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

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

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

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

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

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

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

Regex – сложный вопрос, но я надеюсь, что вы начнете.

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

Я предполагаю, что по натуральному числу вы имели в виду положительное целое число (которое исключает число 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; } } 

Этот вид зависит от вашего определения натуральных чисел – согласно различным теориям, число ноль ( 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 является более быстрым решением, как уже указывали другие (вам нужно будет сделать вторую проверку, если вы не хотите разрешать нулевое число).

 in_array(str_replace(str_split('0123456789'), '', $s), array(',','.','')); 

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

 function isnature($x){ $y = ceil($x)-floor($x); return $y == 0 ? true : false; }