2017-02-21 65 views
-2

Мне нужно регулярное выражение для проверки строки VLAN, введенной пользователем. Строка должна содержать числа или диапазоны, разделенные запятой. Числа должны быть в пределах от 1 до 4093.Regex, чтобы принимать числа и/или диапазон чисел через запятую, но между диапазоном 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

Чистые запросы кода письма являются вне темы на переполнение стека - мы ожидаем, что вопросы здесь, чтобы относиться к * конкретных * проблемы с программированием - но мы с радостью поможем вам сами написать! Скажите нам [что вы пробовали] (http://stackoverflow.com/help/how-to-ask) и где вы застряли. Это также поможет нам лучше ответить на ваш вопрос. –

+0

Можете ли вы показать нам, что вы пробовали и каким был результат? – SaggingRufus

ответ

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]))?)*$ 

Live demo

+0

Большое спасибо. Он работает отлично. – Rinky

+1

@ Rinky, пожалуйста, примите ответ, поскольку он помогает другим идентифицировать, что проблема решена, и надлежащие кредиты передаются человеку, который ответил –