QQ扫一扫联系
要判断一个字符串是否是有效的IPv4地址,我们可以遵循IPv4地址的规则:
IPv4地址由四个用点号分隔的十进制数字组成。
每个数字必须在0到255之间(包括0和255)。
第一个数字不能以0开头,除非它是0本身。
以下是一个Python函数,用于判断一个字符串是否是IPv4地址:
def is_valid_ipv4(ip): # 使用正则表达式来匹配IPv4地址的模式 pattern = r'^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' if re.match(pattern, ip): # 如果匹配成功,还需要确保没有以0开头的非零数字 parts = ip.split('.') for part in parts: if part[0] == '0' and part != '0': return False return True return False # 导入re模块以使用正则表达式 import re # 测试用例 test_cases = [ '192.168.1.1', # 有效 '255.255.255.255', # 有效 '0.0.0.0', # 有效 '256.0.0.1', # 无效,因为第一个数字超过255 '192.168.1.300', # 无效,因为最后一个数字超过255 '192.168.1', # 无效,因为缺少点号分隔的数字 '192.168.01.1', # 无效,因为第二个数字以0开头 '192.168.0.0.1', # 无效,因为包含五个由点号分隔的数字 'a.b.c.d', # 无效,因为包含非数字字符 '', # 无效,因为字符串为空 None, # 无效,因为不是字符串 ] # 运行测试用例 for case in test_cases: if case is None: print(f'None is not a valid IPv4 address') elif not isinstance(case, str): print(f'{case} (type: {type(case)}) is not a valid IPv4 address (not a string)') else: result = is_valid_ipv4(case) print(f'{case} is a valid IPv4 address: {result}')
请注意,我在正则表达式中使用了非捕获组((?:...)
),这样它们就不会在re.match
的结果中创建额外的分组。此外,我添加了对空字符串和非字符串类型的检查,以确保测试用例的完整性。
当你运行这个脚本时,它将输出每个测试用例是否是有效的IPv4地址。