首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Regex:是否可以用一个regex验证一个端口和一个端口范围?

Regex:是否可以用一个regex验证一个端口和一个端口范围?
EN

Stack Overflow用户
提问于 2016-08-26 09:09:05
回答 1查看 3.5K关注 0票数 1

我知道在这个领域有很多问题,但是我还没有找到一个能为我的问题提供任何帮助或答案的问题,作为一个完整的regex,我需要你的帮助。

我使用这个正则表达式来验证端口号:

代码语言:javascript
复制
^([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格式的端口范围?

示例:

允许:

代码语言:javascript
复制
6112
6112:6120
27015:28000

不允许:

代码语言:javascript
复制
6112:
:6113 
6112-7777
27100(any other character than colon)28000
EN

回答 1

Stack Overflow用户

发布于 2016-08-26 10:53:15

编辑:在注释中,您提到了范围验证意味着检查第一个范围部分是否低于第二个范围部分。当然,regex是不可能的(只有.NET regex才能做到这一点,但是模式会被过度杀死),与:拆分,将两个块大小写为数字和比较数字。

如果您只想确保字符串是一个端口或任意顺序的一系列端口,您可以尝试一个带有可选组(?:<PATTERN_BLOCK>)?的正则表达式。只在不能使用任何专用编程语言即的情况下才使用regex。

代码语言:javascript
复制
^([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]))?$

把它分成几块:

代码语言:javascript
复制
^                        # 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演示

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39162558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档