检查有效的主机:端口组合

3

有没有一种使用正则表达式和PHP检查有效的 host:port 组合的方法?

正则表达式必须确保:

  • host 是有效的 IP(包含四个由 3 点分隔的 1-3 位数字,数字范围在 1-255 之间)
  • 存在分隔符 :
  • port 是介于 0 和 65535 之间的有效数字
  • 不允许其他内容存在

有效 组合示例:

  1. 95.241.1.5:5423

  2. 2.8.5.2:65532

无效 组合示例:

  1. 1.2345.12.1:5441

  2. 15.852.32.455:151896841

  3. 65.112.15.32:48trololo


3
为什么要使用正则表达式(regex)? - Tim Pietzcker
是的,正则表达式只适用于最基本的检查......顺便说一句,你忘记检查IP中每组数字必须小于256了。祝你用正则表达式检查好运! - SJuan76
1
"95.441.1.5" 幾乎不是一個有效的 IP。 - You
哦,是的,对不起。 - user562854
IPv6怎么样?它来得很快。 - Ryan Stewart
是的,我知道,但只要服务器和我都没有IPv6连接,现在它就没用了。 - user562854
1个回答

5
^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9]):(?:6553[0-5]|655[0-2][0-9]|65[0-4][0-9]{2}|6[0-4][0-9]{3}|[1-5][0-9]{4}|[1-9][0-9]{1,3}|[0-9])$

应该可以工作,但是尝试使用正则表达式匹配数字并不太美观......

以冗长的格式,更易读:

^
(?:
 (?:
  25[0-5]|        # 250-255
  2[0-4][0-9]|    # 200-249
  1[0-9][0-9]|    # 100-199
  [1-9]?[0-9]     # 0-99
 )  
 \.               # .
){3}              # three times, last segment follows (no dot)
(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])
:                 # :
(?:
 6553[0-5]|       # 65530-65535
 655[0-2][0-9]|   # 65500-65529
 65[0-4][0-9]{2}| # 65000-65499
 6[0-4][0-9]{3}|  # 60000-64999
 [1-5][0-9]{4}|   # 10000-59999
 [1-9][0-9]{1,3}| # 10-9999
 [0-9]            # 0-9
)
$

1
现在你有两个问题。 - Umopepisdn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接