如何在Python中验证IP地址?

 使用ipaddress模块:

  • 内置,可靠,并处理IPv4和IPv6。
  • 干净的代码/接口:`ipaddress.ip_address(ip)`。
  • 易于使用,没有复杂的模式。

import ipaddress

def is_valid_ip(ip):
    try:
        ipaddress.ip_address(ip)
        return True
    except ValueError:
        return False

# 测试
ip_address = "192.168.1.1"
if is_valid_ip(ip_address):
    print(f
"{ip_address} 是有效的IP地址")
else:
    print(f
"{ip_address} 不是有效的IP地址")


不要使用正则表达式:

  • Regex模式可能很复杂,很难维护。
  • 容易出错,尤其是IPv6地址。
  • 不要重新发明轮子!

import re

def is_valid_ip(ip):
    # 定义IPv4的正则表达式
    ipv4_pattern = re.compile(r'^(\d{1,3}\.){3}\d{1,3}$')

    # 定义IPv6的正则表达式
    ipv6_pattern = re.compile(r'^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|"'
                              r'([0-9a-fA-F]{1,4}:){1,7}:|
"'
                              r'([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|
"'
                              r'([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|
"'
                              r'([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|
"'
                              r'([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|
"'
                              r'([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|
"'
                              r'[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|
"'
                              r':((:[0-9a-fA-F]{1,4}){1,7}|:)|
"'
                              r'fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|
"'
                              r'::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|'
                              r'(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}('
                              r'25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|
"'
                              r'([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|'
                              r'(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}('
                              r'25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$')

    # 判断是否为有效的IPv4或IPv6地址
    if ipv4_pattern.match(ip) or ipv6_pattern.match(ip):
        return True
    else:
        return False

# 测试
ip_address =
"192.168.1.1"
if is_valid_ip(ip_address):
    print(f
"{ip_address} 是有效的IP地址")
else:
    print(f
"{ip_address} 不是有效的IP地址")

上述两种方法都可以用来验证IPv4和IPv6地址。方法二使用了Python的内置ipaddress库,它提供了更简单的方式来处理IP地址的验证和操作。