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$
Другие вопросы по тегам