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

时间:2011-07-17 20:06:57

标签: php regex

有没有办法使用正则表达式和php检查有效的host:port组合?

正则表达式必须确保:

  • host是一个有效的IP(包含4个1-3位数字,以3个点分隔,数字范围为1-255)
  • 有一个分隔符:
  • port是0到65535之间的有效数字
  • 其他任何内容都不允许

有效组合的示例:

  1. 95.241.1.5:5423

  2. 2.8.5.2:65532

  3. 无效组合的示例:

    1. 1的 2345 .12.1:5441

    2. 15.852.32.455:的 151896841

    3. 65.112.15.32:的 48trololo

1 个答案:

答案 0 :(得分:6)

^(?:(?: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
)
$