【问题标题】:python IP validation REGex validation for full and partial IPspython IP验证REGex验证完整和部分IP
【发布时间】:2012-01-06 08:23:45
【问题描述】:

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

我觉得我可能需要正确使用锚点?我已经尽我所能尝试了一切,任何帮助将不胜感激。

【问题讨论】:

    标签: python regex ip


    【解决方案1】:

    也许你可以避免使用正则表达式,让 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 dotted-quad notation)。

    source

    【讨论】:

    • 我需要使用正则表达式,其次我不认为sicket.inet_aton 可以验证部分IP?
    • @A.R.B :如链接文档中所述,inet_aton 将验证部分 IP。他的工作是将有效的 IP 转换为网络符号:)。对于正则表达式的需要,好吧,没关系;)
    • 哦,好的,非常感谢!!我自动假设它不会,这将在未来非常有帮助:)
    【解决方案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

    【讨论】:

    • 非常好的网站!和伟大的 reg x,因为我怀疑我没有正确使用锚点..谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-06-08
    • 2012-07-03
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多