package com.sunyard.util; import java.util.regex.Pattern; public class AddressUtil { // 处理带端口号的地址 public static boolean isValidAddressWithPort(String address) { if (address == null) { return false; } // 分离 IP:port 或 [IPv6]:port String[] parts; if (address.startsWith("[") && address.contains("]:")) { parts = address.split("\\]:", 2); parts[0] = parts[0] + "]"; // 补全 IPv6 的括号 } else { parts = address.split(":", 2); } if (parts.length != 2) { return false; } String ipPart = parts[0]; String portPart = parts[1]; return isValidIP(ipPart) && isValidPort(portPart); } // IPv4 正则(允许 0-255) private static final Pattern IPV4_PATTERN = Pattern.compile( "^((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 Pattern IPV6_PATTERN = Pattern.compile( "^(?:[0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$" ); // 简化域名正则(允许字母、数字、连字符和点) private static final Pattern DOMAIN_PATTERN = Pattern.compile( "^([a-zA-Z0-9-]{1,63}\\.)+[a-zA-Z]{2,63}$" ); public static boolean isValidIP(String ip) { // 检查 IPv4 或 IPv6 return IPV4_PATTERN.matcher(ip).matches() || IPV6_PATTERN.matcher(ip).matches(); } public static boolean isValidDomain(String domain) { return DOMAIN_PATTERN.matcher(domain).matches(); } public static boolean isValidPort(int port) { return port >= 0 && port <= 65535; } // 字符串形式的端口校验 public static boolean isValidPort(String portStr) { try { int port = Integer.parseInt(portStr); return port >= 0 && port <= 65535; } catch (NumberFormatException e) { return false; } } }