python IP地址的正则表达式验证(全段与部分)

1 投票
2 回答
1986 浏览
提问于 2025-04-17 07:03

我正在尝试验证输入,看看它是否是一个有效的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

我觉得我可能需要正确使用锚点?我已经尽力尝试了所有我知道的方法,任何帮助都会很感激。

2 个回答

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 点分四元组表示法)。

来源

3

这个正则表达式可以解决问题:

^(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

撰写回答