PHP регулярное выражение, чтобы проверить, состоит ли число из 5 цифр - PullRequest
4 голосов
/ 30 июля 2009

как написать регулярное выражение, чтобы проверить, состоит ли число только из 5 цифр?

Ответы [ 4 ]

19 голосов
/ 30 июля 2009

Это регулярное выражение должно хорошо работать:

/^\d{5}$/

Это проверит, состоит ли строка только из 5 чисел.

  • / - разделитель. Это в начале и в конце регулярного выражения. (Определяется пользователем, вы можете использовать любой символ в качестве разделителя).

  • ^ - начало привязки строки.

  • \d является сокращением для [0-9], который является классом символов, состоящим только из цифр.

  • {5} означает повторить последнюю группу или символ 5 раз.

  • $ - конец строки привязки.

  • / - закрывающий разделитель.


Если вы хотите убедиться, что номер не начинается с 0, вы можете использовать следующий вариант:

/^[1-9]\d{4}$/

Где:

  • / - разделитель. Это в начале и в конце регулярного выражения. (Определяется пользователем, вы можете использовать любой символ в качестве разделителя).

  • ^ - начало привязки строки.

  • [1-9] - это совпадающие цифры класса символов в диапазоне от 1 до 9.

  • \d - сокращение от [0-9], которое является классом символов, состоящим только из цифр.

  • {4} означает повторить последнюю группу или символ 4 раз.

  • $ - конец строки привязки.

  • / - закрывающий разделитель.


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

14 голосов
/ 30 июля 2009

Это регулярное выражение гарантирует, что число не начинается с нулей:

if(preg_match('/^[1-9]\d{4}$/', $number))
    echo "Number is 5 digits\n";
else
    echo "Number is not five digits\n";

Но почему бы не использовать is_numeric() вместо?

if(is_numeric($number) && $number >= 10000 && $number <= 99999)
    echo "Number is 5 digits\n";
else
    echo "Number is not five digits\n";

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

if(strval(intval($number)) === "$number" && $number >= 10000 && $number <= 99999)
    echo "Number is 5 digits\n";
else
    echo "Number is not five digits\n";
7 голосов
/ 30 июля 2009

Попробуйте это:

^[0-9]{5}$

^ и $ отмечают начало и конец строки, где символы, описанные [0-9], должны повторяться 5 раз. Таким образом, это соответствует только числам с ровно 5 цифрами (но все равно может быть 00000). Если вы хотите разрешить только цифры от 10000 до 99999:

^[1-9][0-9]{4}$

И если вы хотите разрешить любое число до 5 цифр (от 0 до 99999):

^(?:0|[1-9][0-9]{0,4})$

(?:expr) - это просто группировка без захвата, используемая для чередования нуля и других чисел с ненулевой первой цифрой.

4 голосов
/ 30 июля 2009

Хотя и не используется регулярное выражение, но, надеюсь, быстрее:

$var = trim($var);

if(strlen($var) == 5 && ctype_digit($var))
{
//
}

EDIT: Добавлена ​​функция обрезки. Это важно! Он удаляет пробелы, так что функция strlen () работает как положено. Также он гарантирует, что $ var является STRING. Вам нужно передать строку в ctype_digit. Если вы передадите say, целое число вернет false !!!

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