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])