Вот рабочее регулярное выражение, которое делает то, что вы просите :
^-?((([0-9]{1,5}|1[0-9]{5}|2(0[0-9]{4}|1([0-3][0-9]{3}|4([0-6][0-9]{2}|7([0-3][0-9]|4[0-7])))))([.][0-9]{2})?)|214748([.]00)?)$
Это во многом зависит от следующих суб-регулярное выражение, которое соответствует диапазону от 0 до 214747:
([0-9]{1,5}|1[0-9]{5}|2(0[0-9]{4}|1([0-3][0-9]{3}|4([0-6][0-9]{2}|7([0-3][0-9]|4[0-7])))))
Почему от 0 до 214747, а не от 0 до 214748? Поскольку это делается так, проще избегать сопоставления значений с 214748.01 по 214748.99 (+/-). Ломая регулярное выражение, получим:
^ # match start of line
-? # optional minus sign
(# match one of the following groups, this one:
(
([0-9]{1,5}|1[0-9]{5}|2(0[0-9]{4}|1([0-3][0-9]{3}|4([0-6][0-9]{2}|7([0-3][0-9]|4[0-7])))))
# the sub-regex above matches the range from 0 to 214747
([.][0-9]{2})? # this matches the optional two decimals
)
| # or this one:
214748([.]00)? # 214748, with optional zeroes
)
$ # match end of line
И там у вас есть, чрезмерно сложное регулярное выражение, что это кошмар, чтобы посмотреть, не говоря уже поддерживать. Если вам нужно изменить диапазон, это потребует большой работы.
Я надеюсь, что это чудовище препятствует использованию регулярного выражения для этой задачи. Делайте так, как все говорят и обрабатывают его с помощью соответствующих инструментов. Если regex требуется, скажите им, что это ужасная идея и попросите их исправить требования.
Я должен спросить, есть ли у вас что-то числовое, почему вы используете регулярное выражение? – drobert
Мое требование - ограничить числа, если оно превышает лимит, тогда мне нужно выбросить исключение –
Это, безусловно, НЕ РАБОТАЕТ для регулярного выражения. Вы бы закололи гвоздь отверткой? Нет простого способа написать регулярное выражение для проверки того, что число находится в диапазоне, если пределы диапазона не равны 10 (то есть -100000 <= x <= 100000) –