我知道这个领域有很多问题,但是我找不到可以提供任何帮助或答案的问题,而且作为一个完整的正则表达式,我需要你的帮助。
我正在使用此正则表达式来验证端口号:
^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$
但是有可能创建一个可以以portStart:portEnd
格式验证单个端口号和端口范围的正则表达式吗?
示例:
允许:
6112
6112:6120
27015:28000
不允许:
6112:
:6113
6112-7777
27100(any other character than colon)28000
答案 0 :(得分:3)
编辑:在评论中,您提到通过范围验证,您的意思是检查第一个范围部分是否低于第二个范围部分。当然,使用正则表达式是不可能的(只有.NET正则表达式可以做到这一点,但模式会过度杀伤),与:
分开,两个块都是数字并比较数字。 / p>
如果您只想确保字符串是一个端口或一系列端口的任何顺序,您可以尝试使用可选组(?:<PATTERN_BLOCK>)?
的正则表达式。 仅当您不能使用任何专用编程语言时才使用正则表达式。
^([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])(?::([0-9]{1,4}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5]))?$
将其分解为块:
^ # Start of string
( # Port number regex
[0-9]{1,4}|
[1-5][0-9]{4}|
6[0-4][0-9]{3}|
65[0-4][0-9]{2}|
655[0-2][0-9]|
6553[0-5]
)
(?: # Optional group start
: # The port range delimiter
( # Port number regex
[0-9]{1,4}|
[1-5][0-9]{4}|
6[0-4][0-9]{3}|
65[0-4][0-9]{2}|
655[0-2][0-9]|
6553[0-5]
)
)? # Optional group end
$ # End of string
请参阅regex demo