Как вы пишете регулярное выражение, которое соответствует числовому диапазону от 0 или 000 до 180?
Регулярное выражение: числовой диапазон
Ответ 1
Самый простой способ для этого состоял в том, чтобы проанализировать строку как число и посмотреть, что номер находится в правильном диапазоне.
Чтобы сделать это с помощью чистого регулярного выражения, вам нужно идентифицировать шаблон и записать его:
^(0?[0-9]{1,2}|1[0-7][0-9]|180)$
У этого есть три альтернативы: один для одно- и двухзначных чисел (допускающих ведущие нули), где каждая цифра может быть чем угодно от 0 до 9. И еще один, который указывает, какой диапазон цифр разрешен для каждой цифры в трехзначное число. В этом случае это означает, что первая цифра должна быть 1, вторая - от 0 до 7, а последняя может быть любой. Третий вариант - это просто номер 180, который не очень хорошо вписывается в шаблон в другом месте.
Более простой подход может быть
^(0{0,2}[0-9]|0?[1-9][0-9]|1[0-7][0-9]|180)$
который просто чередуется для каждого сложного числового диапазона.
Ответ 2
Я не думаю, что регулярное выражение является правильным выбором для этого. Вы пытались разобрать ценность? Если вам нужно использовать регулярное выражение, я бы совпадал с \d{1,3}
, анализируя строку и затем проверяя число в коде.
Ответ 3
На UtilityMill.com есть онлайн-утилита для их генерации. По вашему вопросу это возвращает:
0*([0-9]{1,2}|1[0-7][0-9]|180)
Ответ 4
Недавно выпущенный инструмент командной строки rgxg
генерирует регулярные выражения, которые соответствуют определенному диапазону номеров:
$ rgxg range -Z 0 180
(180|1[0-7][0-9]|0?[0-9]{1,2})
Для получения дополнительной информации см. http://rgxg.sf.net.
Ответ 5
Мои два цента:
Любой, кто отправил ответ на этот вопрос , должен был проверить свое регулярное выражение с AT LEAST следующими входами:
В случае совпадения: 0, 00, 000, 5, 05, 005, 95, 095, 180
НЕ должно соответствовать: 0000, 0095, 181, 190
Я думаю, что Johannes Rössel написал так же хорошо, как вы получите:
^(0?[0-9]{1,2}|1[0-7][0-9]|180)$
Ответ 6
Попробуйте следующее:
^(0|[1-9][0-9]?|1[0-7][0-9]|180)$
Ответ 7
Я бы разбил диапазоны так, чтобы их можно было легко указать в отдельном отдельном регулярном выражении:
^(0|0[0-9][0-9]|1[0-7][0-9]|180)$
Или, что то же самое в человеческих читаемых терминах:
0 000-099 100-179 180
Если вам нужен двузначный диапазон, это просто вопрос добавления [0-9][0-9]
в регулярное выражение.
Кроме того, если у вас возникли проблемы с работой с регулярным выражением, попробуйте указать их таким образом, чтобы операторы регулярных выражений были как можно более ясными - как правило, есть способ представить их таким образом, чтобы их функция была более понятной, особенно если язык, в котором вы делаете это, позволяет отделить части спецификации регулярного выражения в отдельные столбцы и строки.
Ответ 8
Я изменил Gumbo's:
^(00?0?|0?[1-9][0-9]?|1[0-7][0-9]|180)$
Попробуйте это.
Ответ 9
если вам не нравятся отрицательные числа
>> r = /\b(0?\d?\d|1[0-7]\d|180)\b/
=> /\b(0?\d?\d|1[0-7]\d|180)\b/
>> (0..200).map {|i| i.to_s =~ r }
=> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]
>>
Ответ 10
Вы можете использовать следующее регулярное выражение
^([0-1]?[0-7]?[0-9])|180$