Regex для принятия чисел и / или диапазона номеров, разделенных запятыми, но в диапазоне 1-4093

Мне нужно регулярное выражение для проверки строки VLAN, введенной пользователем. Строка должна содержать числа или диапазоны, разделенные запятой. Числа должны быть от 1 до 4093.

Ниже разрешены образцы:

1,
1,2,3,4
1-10, 
1-4093
4000

Я попробовал ниже:

^0*([1-9]|[1-8][0-9]|9[0-9]|[1-8][0-9]{2}|9[0-8][0-9]|99[0-9]|[1-3][0-9]{3}|40[0-8][0-9]|409[0-3])$  

Необходимо увеличить для запятой и диапазонов

1 ответ

Решение

Для совпадения числа от 1 до 4093 можно использовать:

(?:[1-9]\d{0,2}|[1-3]\d{3}|40(?:[0-8]\d|9[0-3]))

Что мы будем называть N, Теперь часть повторения:

^(N)(?:[,-] *(N)?)*$

который дает:

^(?:[1-9]\d{0,2}|[1-3]\d{3}|40(?:[0-8]\d|9[0-3]))(?:[,-] *(?:[1-9]\d{0,2}|[1-3]\d{3}|40(?:[0-8]\d|9[0-3]))?)*$

Живая демо

Регулярное выражение для диапазона идентификаторов vlan 1-4093

(40(?:[0-8]\d|9[0-3])|[1-3]\d{2,3}|\d{2,3}|[1-9])
Другие вопросы по тегам