1.校验ip
方式1 - ipv4-正则匹配
^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$
^ # 开始匹配字符串
(
(25[0-5]|2[0-4]\d|1\d{
2}|[1-9]\d|\d) # 匹配 0 到 255 的数字
\.
){
3} # 重复匹配上述组合,确保有三个点号分隔的数字
(25[0-5]|2[0-4]\d|1\d{
2}|[1-9]\d|\d) # 匹配最后一组数字
$ # 结束匹配字符串
def is_valid_ip(IP):
pattern = r'^((25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$'
if re.match(pattern, IP):
return True
else:
return False
方式2 - ipaddress 库
官方文档
https://docs.python.org/3/library/ipaddress.html
import ipaddress
def get_ip_version(ip):
try:
ip_obj = ipaddress.ip_address(ip)
return ip_obj.version
except ValueError:
return None
# 示例用法
ipv4_address = "192.168.1.1"
ipv6_address = "2001:db8::1"
invalid_address = "not_an_ip"
ip_version_ipv4 = get_ip_version(ipv4_address)
ip_version_ipv6 = get_ip_version(ipv6_address)
ip_version_invalid = get_ip_version(invalid_address)
print(f"{ipv4_address} 的版本是: {ip_version_ipv4}")
print(f"{ipv6_address} 的版本是: {ip_version_ipv6}")
print(f"{invalid_address} 的版本是: {ip_version_invalid}")
2.校验域名
英文域名-正则匹配
^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$
正则解释
^ # 开始匹配字符串
( # 开始捕获组
(?!-) # 负向前瞻断言,确保域名的每一部分不以破折号开头
[A-Za-z0-9-]{
1,63} # 匹配 1 到 63 个字母、数字或破折号(域名每一部分的长度限制)
(?<!-) # 负向后顾断言,确保域名的每一部分不以破折号结尾
\. # 匹配点号(域名中的分隔符)
)+ # 重复匹配上述捕获组,确保有至少一个点号
[A-Za-z]{
2,6} # 匹配域名的顶级域名(TLD),2到6个字母
$ # 结束匹配字符串
def is_valid_domain(domain):
"""校验域名,只支持英文域名"""
if len(domain) > 254:
return False
if not re.match("^((?!-)[A-Za-z0-9-]{1,63}(?<!-)\\.)+[A-Za-z]{2,6}$", domain):
return False
return True