2015-10-06 2 views
1

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

Ряд х является действительным, если он лежит между 150-200, или 700-750

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

Я новичок в регулярных выражениях, поэтому не могу придумать один для вышеупомянутой проверки.

+1

Regex просто не * хороший способ справиться с этой проблемой * ... вы используете СУБД, придерживаетесь инструментов, уже находящихся в DB ... regex работает медленно. Если вы используете SQL, проверьте это http://stackoverflow.com/questions/1736630/sql-constraint-minvalue-maxvalue ... в противном случае пометьте свои СУБД – Mariano

+1

@Mariano, являющийся медленным, может не быть основной проблемой. Если диапазоны будут более сложными, создание и поддержание регулярного выражения будет кошмаром: http://stackoverflow.com/a/20793792/1393766 – Pshemo

+0

@Pshemo Я знаю, я пошел так просто для удовольствия. Конечно, вы всегда можете [чит] (http://utilitymill.com/utility/Regex_For_Range) – Mariano

ответ

1

Решение:

1[5-9][0-9]|200|7[0-4][0-9]|750 

Объяснение:

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

Он может быть разбит на две части:

    через ИЛИ через ИЛИ

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

((150 через ИЛИ 200) ИЛИ (700 через ИЛИ 750))

Ваше первое число 150, поэтому мы должны соответствовать '1' для первая цифра, за которой следует диапазон для второй цифры, которая может быть равна 5, хотя 9 (вы не хотите ничего меньше, чем 150, поэтому 4 и меньше выходят), а также диапазон для третьей цифры, который может быть любым из 0 до 9. Это фиксирует все номера от 150 до 199.

Последний номер nu mber в первом диапазоне - 200, поэтому мы можем просто искать это. Он слишком отличается от остальных возможностей в диапазоне, поэтому его легче искать именно для него, а не пытаться представить сложный способ включить его в диапазон регулярных выражений.

Второй ряд следует за тем же паттеном, но с разными номерами. Опять же, мы ищем большую часть чисел, используя диапазон регулярных выражений и ищем последний номер 750, особенно потому, что он слишком разный - имеет номер 5 посередине. Если мы включим 5 в средний диапазон регулярных выражений, он достигнет 759, что выходит за рамки.

И, наконец, ИЛИ обе части и регулярное выражение готовы.

Настройте для ввода. Возможно, вам необходимо окружить его символами^и $ для начала и конца строки, или если у вашего ввода есть другой текст, окружающий указанное число, разверните ваше регулярное выражение, чтобы справиться с ним соответствующим образом.

+4

Хотя это регулярное выражение может ответить на вопрос, предоставляя дополнительный контекст относительно того, почему и/или как этот код отвечает на вопрос, улучшает его долгосрочную ценность. – JAL

+0

Вы можете привязать его к '^' и '$', чтобы избежать совпадения других чисел. – Mariano

+1

@JAL Хорошая точка. Объяснение теперь приводится в ответе. – keda

Смежные вопросы