我试图验证输入以查看它是否是有效的IP地址(可能是部分IP地址)。
可接受的输入:172,172.112,172.112.113,172.112.113.114
不可接受的输入:1724,172.11113等等
这是我创建的一个函数来检查它(但它验证了不可接受的输入,如1724,我似乎无法修复..请帮助)
def ipcheck(ip):
ippattern_str = '(([1-2]?[\d]{1,2}\.?){0,1}(\.[1-2]?[\d]{1,2}){0,1}(\.[1-2]?[\d]{1,2}\.){0,1}(([1-2]?[\d]{1,2}[\D\W]*)'
ippattern = re.compile(ippattern_str)
# ippattern is now used to call match, passing only the ip string
global matchip
matchip = ippattern.match(ip)
return matchip
ip = sys.argv[1]
ipcheck(ip)
print matchip
我觉得我可能需要正确使用锚点?我已经尽力了解所有的知识,任何帮助将不胜感激。
答案 0 :(得分:7)
也许你可以避免使用正则表达式让python socket.inet_aton完成这项工作:
import socket
try:
socket.inet_aton(addr)
# correct IP
except socket.error:
# bad IP
对于inet_aton,有效的IP地址格式如下:
a.b.c.d
a.b.c
a.b
a
在所有上述形式中,虚线地址的组成部分可以是 以十进制,八进制(带前导0)或十六进制指定,带有 领先0X)。任何这些形式的地址统称为 IPV4数字和点符号。使用恰好四个的表单 十进制数称为IPv4点分十进制表示法(或 有时:IPv4点分四位表示法。
答案 1 :(得分:2)
这个正则表达式可以解决这个问题:
^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){0,3}$
确保给定的数字在正确的范围内(0-255),并且可以有1-4个部分。
您可以在此处看到它:http://regexr.com?2va3j