Java中校驗IPv4和IPv6

結合網上給的示例程序,借鉴前辈们的成果,完善一下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);
	}
	
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值