如何完善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
相关产品推荐
相关产品推荐

