详解Python判定IP地址合法性的三种方法
本文详解Python中验证IPv4地址合法性的三种常用方法。通过正则表达式实现代码精简,利用字符串分割法逻辑直观,以及引入IPy第三方库简化调用。文章对比了各方案的代码量、复杂度与依赖需求,帮助开发者根据实际场景选择最优方案。
IP地址合法性校验是软件开发中的高频需求。尽管看似基础,但其实际作用重大,且实现时容易因细节疏忽而出错。本文旨在总结并解析三种常用的IP地址合法性校验方案。
IPv4地址的标准格式由四个段组成,每个段的取值范围分别为(1~255)、(0~255)、(0~255)和(0~255)。
方法1:正则表达式判定法
最直接的实现方式是构建一个匹配IPv4格式的正则表达式。通过判断用户输入是否与预设的正则表达式完全匹配,若匹配成功则视为合法IP地址,否则判定为非法。
^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$
以下是验证IP地址对应的正则表达式代码:
\d 表示匹配0~9之间的任意单个数字
{2} 表示前面的字符正好出现两次
[0-4] 表示匹配0~4之间的任意单个数字
| 表示逻辑“或”的关系
1\d{2} 表示匹配100~199之间的任意数字
2[0-4]\d 表示匹配200~249之间的任意数字
25[0-5] 表示匹配250~255之间的任意数字
[1-9]\d 表示匹配10~99之间的任意数字
[1-9]) 表示匹配1~9之间的单个数字
\. 表示对特殊字符点号进行转义(类似@等特殊字符均需使用\\进行转义)
具体代码如下:
import re
def check_ip(ipAddr):
compile_ip=re.compile('^(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)$')
if compile_ip.match(ipAddr):
return True
else:
return False
方法2:字符串拆解法
将IP地址视为字符串,以点号(.)为分隔符进行分割,随后对分割后的各部分进行逻辑判断。
相关代码实现如下:
#!/usr/bin/python
import os,sys
def check_ip(ipAddr):
import sys
addr=ipAddr.strip().split('.') #切割IP地址为一个列表
#print addr
if len(addr) != 4: #切割后列表必须有4个参数
print "check ip address failed!"
sys.exit()
for i in range(4):
try:
addr[i]=int(addr[i]) #每个参数必须为数字,否则校验失败
except:
print "check ip address failed!"
sys.exit()
if addr[i]<=255 and addr[i]>=0: #每个参数值必须在0-255之间
pass
else:
print "check ip address failed!"
sys.exit()
i+=1
else:
print "check ip address success!"
if len(sys.argv)!=2: #传参加本身长度必须为2
print "Example: %s 10.0.0.1 "%sys.argv[0]
sys.exit()
else:
check_ip(sys.argv[1]) #满足条件调用校验IP函数
方法3:引入IPy类库
IPy是一个功能强大的处理IP地址的第三方Python库。
关于IPy库的具体安装步骤,请读者自行查阅相关文档。
import IPy
def is_ip(address):
try:
IPy.IP(address)
return True
except Exception as e:
return False
总结
上述三种方法均能准确判断IPv4地址的合法性。正则表达式法代码量少、逻辑简单,但正则表达式本身编写较为繁琐;字符串判定法易于理解,但代码量相对较大;使用类库法判断简洁,但需引入额外依赖。各方案各有优劣,开发者可根据具体需求自行选择。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













