我正在尝试验证IP地址。以下是代码。谁能告诉我代码中有什么问题?
import re
ip = '355.4'
m = re.match('^((?:1?\d{0,2}|2[0-4]\d{1}|25[0-5]).){3}(?:1?\d{0,2}|2[0-4]\d{1}|25[0-5])$', ip)
if m:
print "correct"
print m.groups()
else:
print "wrong"
根据给定的IP,它应该打印wrong
作为输出,但它会输出correct ('4',)
作为输出。
答案 0 :(得分:2)
如果允许not to use regex
,则可以使用python的套接字包。 inet_aton("string")
将string
转换为ip
地址,如果这不是有效的IP,则会抛出异常。
我尝试过的简单例子:
import socket
def check_valid(address):
try:
socket.inet_aton(address)
return address.count('.') == 3
except socket.error:
return False
if __name__ == "__main__":
print check_valid("192.168.1.255")
当192.168.1.257
有效时,它会检查所有有效的IP地址,例如192.168.1.255
无效。
答案 1 :(得分:0)
我在\
之前没有给出.
,这导致它与任何角色匹配,从而犯了一个错误。
import re
ip = '255.25.2.256'
m = re.match('^((?:1?\d{0,2}|2[0-4]\d{1}|25[0-5])\.){3}(?:1?\d{0,2}|2[0-4]\d{1}|25[0-5])$', ip)
if m:
print "correct"
print m.groups()
else:
print "wrong"
答案 2 :(得分:0)
len(ip.split(".")) == 4 and all(map(lambda o: o.isdigit() and int(o) <= 255, ip.split(".")))
永远不要在代码中使用正则表达式。请。
答案 3 :(得分:0)
您应该删除?
中的可选限定符:1?
。
否则....
是有效的IP地址。