正则表达式:是否可以使用一个正则表达式验证端口和端口范围?

时间:2016-08-26 09:09:05

标签: regex validation

我知道这个领域有很多问题,但是我找不到可以提供任何帮助或答案的问题,而且作为一个完整的正则表达式,我需要你的帮助。

我正在使用此正则表达式来验证端口号:

^([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

1 个答案:

答案 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