Regex, числа ниже 20 КБ
Я ищу регулярное выражение, чтобы проверить, если числа ниже 20 000. Я не могу найти правильное решение, у меня пока так:
(^([1-9]([0-9]{0,3})|20000)$)
Что работает вполне нормально, но как только он достигает 10 000, он не дает совпадений. Таким образом, у меня разрыв с 9 999 - 20 000.
Что я делаю неправильно? Я не использую регулярное выражение для этих ситуаций, но сторонней программе требуется регулярное выражение для таких..
Спасибо!
3 ответа
Ваше регулярное выражение - ^([1-9]([0-9]{0,3})|20000)$
- соответствует числам от 1
до 9999
а также 20000
,
Вы можете использовать
^([1-9]\d{0,3}|1\d{4}|20000)$
Посмотреть демо
Сломать:
^
- сопоставить начало строки([1-9]\d{0,3}|1\d{4}|20000)
- соответствовать одной из альтернатив:[1-9]\d{0,3}
-1
в9
с 0 до 3 любых цифр (от1
до9999
)1\d{4}
-1
с любыми 4 цифрами (для соответствия10000 - 19999
)20000
- в прямом смысле20000
$
- соответствовать концу строки
Я получил это:
^([01]?\d{0,4}|20000)$
Которые соответствуют любому числу от 0 до 20 000 и позволяют пользователю использовать номер с ведущим 0 Live Demo
([1-9]([0-9]{0,3})
часть предназначена для соответствия всем номерам строго ниже 2000
но вы определяете это как: "цифра от одной до девяти, за которой следуют от нуля до трех цифр". Сейчас 10 000
это один, за которым следуют четыре нуля: вы можете переписать часть как:
[1-9][0-9]{3}|1[0-9]{4}
Полное регулярное выражение теперь:
^[1-9][0-9]{3}|1[0-9]{4}|20000$