結合網上給的示例程序,借鉴前辈们的成果,完善一下Java语言中利用正则表达式校验IPv4和IPv6
请看代码,欢迎留言交流。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IpAddressTest {
public static boolean isIPv6(String address){
boolean result = false;
String regHex = "(\\p{XDigit}{1,4})";
//没有双冒号
String regIPv6Full = "^(" + regHex + ":){7}" + regHex + "$";
//双冒号在中间或者没有双冒号
String regIPv6AbWithColon = "^(" + regHex + "(:|::)){0,6}" + regHex
+ "$";
//双冒号开头
String regIPv6AbStartWithDoubleColon = "^(" + "::(" + regHex
+ ":){0,5}" + regHex + ")$";
String regIPv6 = "^(" + regIPv6Full + ")|("
+ regIPv6AbStartWithDoubleColon + ")|(" + regIPv6AbWithColon
+ ")$";
//System.out.println("regIPv6 =" + regIPv6);
//regIPv6 =^(^((\p{XDigit}{1,4}):){7}(\p{XDigit}{1,4})$)|(^(::((\p{XDigit}
//{1,4}):){0,5}(\p{XDigit}{1,4}))$)|(^((\p{XDigit}{1,4})(:|::)){0,6}(\p
//{XDigit}{1,4})$)$
//等价于^(^::$)|(^([\\d|a-fA-F]{1,4}:){7}([\\d|a-fA-F]{1,4})$)|(^(::
//(([\\d|a-fA-F]{1,4}):){0,5}([\\d|a-fA-F]{1,4}))$)|(^(([\\d|a-fA-F]{1,4})
//(:|::)){0,6}([\\d|a-fA-F]{1,4})$)$
//下面还要处理地址为::的情形和地址包含多于一个的::的情况(非法)
if (address.indexOf(":") != -1){
if (address.length() <= 39) {
String addressTemp = address;
int doubleColon = 0;
if(address.equals("::"))return true;
while (addressTemp.indexOf("::") != -1) {
addressTemp = addressTemp.substring(addressTemp
.indexOf("::") + 2, addressTemp.length());
doubleColon++;
}
if (doubleColon <= 1){
result = address.matches(regIPv6);
}
}
}
return result;
}
public static boolean checkIpAddress(String address) {
String checkPattern = "^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])((\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])){3}|(\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])){5})$";
Pattern pattern = Pattern.compile(checkPattern);
Matcher matcher = pattern.matcher(address);
return matcher.matches();
}
public static void main(String[] args){
boolean bt=checkIpAddress("192.168.0.0");
System.out.println(bt);
bt = checkIpAddress("192.168.2.3.1.1"); //6段ipv6格式
System.out.println(bt);
bt = checkIpAddress("bd5.168.2.1");
System.out.println(bt);
bt = checkIpAddress("192.168.254.10");
System.out.println(bt);
bt = checkIpAddress("192.168.254.10.1.1.1.1");
System.out.println(bt);
bt = checkIpAddress("192.168.254.10.1.1.1");
System.out.println(bt);
bt = isIPv6("192:168:254:10:1:1:1:1");
System.out.println(bt);
}
}