我正在尝试进行测试以检查 sys.argv 输入是否与 IP 地址的正则表达式匹配...
作为一个简单的测试,我有以下......
import re
pat = re.compile("\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}")
test = pat.match(hostIP)
if test:
print "Acceptable ip address"
else:
print "Unacceptable ip address"
但是,当我将随机值传递给它时,在大多数情况下它会返回“可接受的 IP 地址”,除非我有一个基本上相当于\d+
.
使用正则表达式来验证 IP 地址是一个坏主意 - 这会将 999.999.999.999 视为有效。尝试使用套接字代替这种方法 - 更好的验证并且同样简单,甚至更容易做到。
import socket
def valid_ip(address):
try:
socket.inet_aton(address)
return True
except:
return False
print valid_ip('10.10.20.30')
print valid_ip('999.10.20.30')
print valid_ip('gibberish')
如果您确实想使用解析主机方法,则此代码将完全执行此操作:
def valid_ip(address):
try:
host_bytes = address.split('.')
valid = [int(b) for b in host_bytes]
valid = [b for b in valid if b >= 0 and b<=255]
return len(host_bytes) == 4 and len(valid) == 4
except:
return False
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)