Regex. Подберите любое число от 1 до 365 - PullRequest
0 голосов
/ 20 мая 2009

Мы используем средство проверки RegEx для проверки ввода из текстового поля.

Текущее выражение RegEx проверяет, находится ли текущее число в диапазоне от 1 до 999.

Мы только что унаследовали этот код, и нам нужно изменить диапазон с 999 до 365. Короче, нам нужно написать регулярное выражение, чтобы проверить, находится ли ввод от 1 до 365.

Конечно, мы можем просто использовать RangeValidator или пользовательский валидатор. Но мы не хотим этого делать, потому что не хотим вносить «существенные» изменения.

Спасибо!

EDIT:

Мы также должны поймать следующие шаблоны: 001 для 1 019 для 19

Ответы [ 4 ]

12 голосов
/ 20 мая 2009

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

 ^([1-9][0-9]?|[12][0-9][0-9]|3[0-5][0-9]|36[0-5])$

[1-9][0-9]?     matches    1 -  99
[12][0-9][0-9]  matches  100 - 299
3[0-5][0-9]     matches  300 - 359
36[0-5]         matches  360 - 365

РЕДАКТИРОВАТЬ: с ведущими нулями (также совпадает со строками, такими как 00000000321):

 ^0*([1-9][0-9]?|[12][0-9][0-9]|3[0-5][0-9]|36[0-5])$
5 голосов
/ 20 мая 2009

Запомни пробел, високосный год. : -)

2 голосов
/ 20 мая 2009

вы действительно не хотите использовать регулярные выражения для этого, вы должны просто использовать / ^ \ d {1,3} $ / и проверить число как 1..365

как для регулярного выражения:

SNIP

Фердинандс в порядке:)

1 голос
/ 20 мая 2009

Небольшое дополнение к регулярному выражению Фердинанда для ловли ведущих нулей:

^([0]{0,2}[1-9]|[0]?[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-5])$

[0]{0,2}[1-9]  - catches 001, 01, 1...
[0]?[1-9][0-9] - catches 010, 10...

Обратите внимание, он не ловит 0234 или 0019

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