正则表达式接受以逗号分隔的数字和/或数字范围,但在1-4093范围内

时间:2017-02-21 11:24:57

标签: regex string numbers range vlan

我需要一个正则表达式来验证用户输入的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])$  

需要增强逗号分隔和范围

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

vlan ID范围1-4093的正则表达式

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