基于正则的Java的IP地址格式校验(ipv4 ipv6)
import java.util.regex.Pattern;public class IPAddressValidator {/*** IPv4正则表达式:匹配0.0.0.0到255.255.255.255*/private static final String IPV4_PATTERN ="^((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]?)$";/*** IPv6正则表达式:匹配标准格式(含省略前导零的格式)*/private static final String IPV6_PATTERN ="^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$";// 预编译正则表达式提升性能private static final Pattern IPv4_REGEX = Pattern.compile(IPV4_PATTERN);private static final Pattern IPv6_REGEX = Pattern.compile(IPV6_PATTERN);/*** 校验字符串是否为合法的IPv4或IPv6地址** @param ipAddress 待校验的IP地址字符串* @return 验证结果:* - "IPv4":符合IPv4格式* - "IPv6":符合IPv6格式* - "Invalid":不符合任何格式*/public static String validateIPAddress(String ipAddress) {if (ipAddress == null || ipAddress.isEmpty()) {return "Invalid";}// 优先检查IPv4(IPv4地址长度通常更短)if (IPv4_REGEX.matcher(ipAddress).matches()) {return "IPv4";}// 检查IPv6if (IPv6_REGEX.matcher(ipAddress).matches()) {return "IPv6";}return "Invalid";}// 测试用例public static void main(String[] args) {String[] testIPs = {"192.168.1.1", // 有效IPv4"255.255.255.0", // 有效IPv4"2001:0db8:85a3:0000:0000:8a2e:0370:7334", // 有效IPv6"FE80:0000:0000:0000:0202:B3FF:FE1E:8329", // 有效IPv6"256.0.0.1", // 无效IP(数字超过255)"192.168.01.1", // 无效IP(前导零不允许)"2001::0db8::7334", // 无效IPv6(连续双冒号仅允许一次)"not.an.ip.address" // 无效字符串};for (String ip : testIPs) {System.out.println(ip + " ➜ " + validateIPAddress(ip));}}
}
关键逻辑说明:
IPv4验证规则:
- 四组十进制数字,用点分隔(如 192.168.1.1)
- 每组数字范围:0-255
- 禁止前导零(如 01.0.0.1无效)
正则分解:
25[0-5]:匹配250-2552[0-4][0-9]:匹配200-249[01]?[0-9][0-9]?:匹配0-199(允许单/双数字)
IPv6验证规则:
八组四位十六进制数,用冒号分隔(如 2001:0db8:85a3::8a2e:0370:7334)
支持字母大小写(a-f或 A-F)
- 不支持缩写形式(如 ::需扩展为标准格式)
- 正则简化:
([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}
