Python—给你一个字符串,你怎么判断是不是ipv4地址?手写这段代码,并写出测试用例


ipv4地址的格式:(1~255).(0 ~255).(0 ~255).(0 ~255)

1. 正则表达式

import re

def check_ip(one_str):

    compile_ip = re.compile('^(([1-9]|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$')
    if compile_ip.match(one_str):
        return True
    else:
        return False

if __name__ == '__main__':

    ip_list = ['', '172.31.137.251', '100.10.0.1000', '1.1.1.1', '12.23.13', 'aa.12.1.2', '12345678', '289043jdhjkbh']

    for one_str in ip_list:	
    
	if check_ip(one_str): 
            print('{0} is a legal ip address!'.format(one_str))
        else:
            print('{0} is not a legal ip address!'.format(one_str))

2. 字符串


def check_ip(one_str):

    if '.' not in one_str:
        return False
    elif one_str.count('.') != 3:
        return False
    else:
        flag = True
        one_list = one_str.split('.')
        for one in one_list:
            try:
                one_num = int(one)
                if one_num >= 0 and one_num <= 255:
                    pass
                else:
                    flag = False
            except:
                flag = False
        return flag

if __name__ == '__main__':

    ip_list = ['', '172.31.137.251', '100.10.0.1000', '1.1.1.1', '12.23.13', 'aa.12.1.2', '12345678', '289043jdhjkbh']

    for one_str in ip_list:
        if check_ip(one_str):  #字符串方法
            print('{0} is a legal ip address!'.format(one_str))
        else:
            print('{0} is not a legal ip address!'.format(one_str))

3. 测试用例

有效可用的IP地址
A类1.0.0.0 ~126.255.255.254
A私有10.0.0.0 -10.255.255.254
B类128.0.0.0 -191.255.255.254
B私有172.16.0.0 -172.31.255.254
C类192.0.0.0 -223.255.255.254
C私有192.168.0.0-192.168.255.254
windows自动分配169.254.0.0-169.254.255.254
有效但不可用的IP地址
D224.0.0.0 -239.255.255.254
E240.0.0.0 -255.255.255.254
全网0.x.x.x, x.x.x.0
广播x.x.x.255
回环127.0.0.0 -127.255.255.254
输入结果
64.11.22.33有效可用
10.12.13.14有效可用,不能直接访问公网
151.123.234.56有效可用
172.20.123.56有效可用,不能直接访问公网
192.127.35.65有效可用
192.168.128.128有效可用,不能直接访问公网
169.254.15.200有效可用,不能直接访问公网
224.1.2.3有效不可用,超过有效范围(D类)
250.11.22.33有效不可用,超过有效范围(E类)
0.200.3.4有效不可用,全网地址
64.11.22.0有效不可用,全网地址
10.12.13.255有效不可用,广播地址
127.50.60.70有效不可用,回环地址

版权声明:本文为nickyff原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。