Регулярное выражение для проверки числовых значений - PullRequest
1 голос
/ 26 мая 2010

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

^\d{7}

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

Пропуск: 0123456, 1234567, 0123456789, 123467890
Ошибка: 123456, 12345678, 123456789

Ответы [ 3 ]

5 голосов
/ 26 мая 2010

Простое решение таково:

^\d{7}(\d{3})?$

В этом решении нужно отметить по крайней мере две вещи:

  • В контексте Юникода \d может соответствовать намного больше, чем вы предполагали (например, иностранные символы, которые являются цифрами в других нелатинских языках).
  • Это регулярное выражение содержит группу захвата. Вы, вероятно, не хотите этого. Это можно исправить, изменив группу без захвата (?: ... ).

Так что по этим причинам вы можете использовать это более длинное выражение:

^[0-9]{7}(?:[0-9]{3})?$

Вот небольшой тестовый стенд в C #, чтобы вы могли увидеть, как он работает:

for (int i = 0; i < 12; ++i)
{
    string input = new string('0', i);
    bool isMatch = Regex.IsMatch(input, "^[0-9]{7}(?:[0-9]{3})?$");
    Console.WriteLine(i.ToString().PadLeft(2) + ": " + isMatch);
}

Результат:

 0: False
 1: False
 2: False
 3: False
 4: False
 5: False
 6: False
 7: True
 8: False
 9: False
10: True
11: False
3 голосов
/ 26 мая 2010

Редактировать : Это неправильно, но я собираюсь восстановить его и оставить его в справочных целях, так как голосование говорит о том, что люди думали, что это правильно.Правильное решение: здесь


Я думаю, что просто:

^\d{7}\d{3}?
2 голосов
/ 26 мая 2010

Почему бы не буквальное толкование того, что вы ищете:

^\d{7}|\d{10}$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...