Регулярное выражение для проверки строки int диапазона - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь построить регулярное выражение, которое может проверять ввод числа или диапазона.Допустимые значения:

  • Любое число от 1 до 1816
  • Диапазон, состоящий из 2 чисел, разделенных -.Каждое число должно быть в диапазоне от 1 до 1816. Например, "1-1816", "3-100", "1815-1816"

Недопустимые значения включают

  • "0«
  • отрицательные числа (например,« -13 »)
  • числа с ведущими нулями (например,« 01 »)
  • числа вне диапазона 1-1816 (отдельно или как частьдиапазона)

Любое регулярное выражение будет хорошо JavaScript или C #.

Пока я выяснил только

(?<=\s|^)\d+(?=\s|$)

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Это регулярное выражение должно сделать трюк:

^([1-9][0-9]{0,2}|1[0-7][0-9]{2}|180[0-9]|181[0-6])(-([1-9][0-9]{0,2}|1[0-7][0-9]{2}|180[0-9]|181[0-6]))?$

В основном это позволяет

  • Число с ведущими от 1 до 0 или более цифрами
  • Числос начальным 1, затем 0-7 и дважды любым числом
  • число с первым 180, за которым следует еще одно число
  • число с первым 181, после которого следует одно число 0-6
  • Это необязательно еще раз повторяется после -

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

^[1-9][0-9]{0,3}(-([1-9][0-9]{0,3}))?$

, и затем программно разделить его на - (если есть) и проанализировать отдельные сегменты как целое и проверить их числовые значениязначение в зависимости от диапазона.

Это позволит дополнительно проверить наличие недопустимых диапазонов, таких как 100-1, 1800-1800 и т. д.

1 голос
/ 19 сентября 2019

Проблема с вашим регулярным выражением заключается в том, что вы принимаете все цифры через \d, а не ограничиваете его в соответствии с принятым диапазоном.

Используйте это:

^(?:181[0-6]|180\d|1[0-7]\d{2}|[1-9]|\d{2,3})(?:-(?:181[0-6]|180\d|1[0-7]\d{2}|[1-9]|\d{2,3}))?$

Это регулярное выражение ограничивает числа в диапазоне 1-1816, поддерживая либо отдельные числа, либо диапазон через разделитель дефисов, как указано.

Демонстрация

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