Я хочу создать систему заявок на веб-сайте. Это означает, что пользователи могут публиковать свою заявку (натуральное число). Я хочу, чтобы пользователи не пытались отправлять символы, десятичные числа и т. Д. Я не хочу использовать функцию is_numeric, потому что разрешено шестнадцатеричное обозначение. Я думал использовать preg_match для этого. Но в php.net документации для этой функции мало, и я понятия не имею, как использовать preg_match.
Итак, как мне проверить, является ли переменная натуральным числом с preg_match?
Если вам не нужны десятичные точки: 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; }