我正在尝试进行测试以检查sys.argv输入是否与RegEx的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"
Run Code Online (Sandbox Code Playgroud)
但是,当我将随机值传递给它时,在大多数情况下会返回"可接受的IP地址",除非我有一个基本等同于的"地址" \d+
.
Mar*_*ina 31
使用正则表达式验证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')
Run Code Online (Sandbox Code Playgroud)
如果您真的想要使用parse-the-host方法,那么这段代码将完全执行:
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
Run Code Online (Sandbox Code Playgroud)
Don*_*sto 21
您必须按以下方式修改正则表达式
pat = re.compile("^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$")
Run Code Online (Sandbox Code Playgroud)
那是因为.
是一个代表"每个角色"的通配符
bur*_*ION 14
ip v4的正则表达式:
^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$
Run Code Online (Sandbox Code Playgroud)
否则你没有使用有效的IP地址,如999.999.999.999,256.0.0.0等
我遇到了相同的情况,我发现使用套接字库有帮助的答案,但它不提供对ipv6地址的支持.找到了更好的方法:
不幸的是它仅适用于python3
import ipaddress
def valid_ip(address):
try:
print ipaddress.ip_address(address)
return True
except:
return False
print valid_ip('10.10.20.30')
print valid_ip('2001:DB8::1')
print valid_ip('gibberish')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
79215 次 |
最近记录: |