Java中校驗IPv4和IPv6

来源:互联网 发布:贴吧防秒删软件 编辑:程序博客网 时间:2024/05/02 01:09

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


0 0
原创粉丝点击