You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何完善Python正则表达式以验证IPv4地址各段数值≤255?

如何用Python正则表达式验证IPv4地址的数值范围(≤255)?

你的现有代码已经完成了IPv4地址的格式验证(四段1-3位数字用句点分隔),但确实没处理每段数值≤255的限制——比如256.0.0.1或者999.999.999.999这类不符合规则的地址,现在的正则会误判为合法。下面给你两种解决方案:

方案一:纯正则表达式实现完整验证

我们可以把每段合法的数值范围拆分成几种情况,用正则的分支匹配来覆盖:

  • 0-99:\d{1,2}
  • 100-199:1\d{2}
  • 200-249:2[0-4]\d
  • 250-255:25[0-5]

把这些分支组合起来,再重复四次(用句点分隔),就能得到完整的正则:

import re
# 用原始字符串r''避免频繁转义反斜杠,更简洁
MyRegex = r"^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d?)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d?)$"
while True:
    userip = input("Enter a string: ")
    if re.search(MyRegex, userip):
        print("Input accepted")
    else:
        print("Input Rejected")

解释一下正则里的细节:

  • (?:...)是不捕获组,用来分组但不保存匹配结果,能小幅提升性能
  • 最后一段不需要末尾的句点,所以单独写一次分支逻辑

方案二:正则格式验证 + 数值检查(更易维护)

如果觉得纯正则太复杂,也可以先通过你的原始正则做格式校验,再把地址拆分成四段,逐个转成整数检查是否≤255。这种方法逻辑更直观,后期修改规则也更方便:

import re
MyRegex = r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"
while True:
    userip = input("Enter a string: ")
    if re.search(MyRegex, userip):
        # 拆分地址为四段字符串
        segments = userip.split('.')
        # 检查每段数值是否在0-255之间
        valid = all(0 <= int(seg) <= 255 for seg in segments)
        if valid:
            print("Input accepted")
        else:
            print("Input Rejected")
    else:
        print("Input Rejected")

这里额外加了0 <=的判断,能过滤掉负数开头的非法地址(比如-1.0.0.1),如果你的场景不需要这个限制,可以去掉该条件。

内容的提问来源于stack exchange,提问作者Link

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:52:42