加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

用正则表达式验证IPv6地址的例子

发布时间:2020-12-14 02:26:28 所属栏目:百科 来源:网络整理
导读:public class Hello { public boolean isIPv6(String address) { boolean result = false; String regHex = "(p{XDigit}{1,4})"; //没有双冒号 String regIPv6Full = "^(" + regHex + ":){7}" + regHex + "$"; //双冒号在中间或者没有双冒号 String regIPv


public class Hello {
  public 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,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 void main(String[] args)
{
  Hello hello=new Hello();
  boolean bln=false;
  bln=hello.isIPv6("::");
  System.out.println("Start...") ;
  if (bln)
   System.out.println("OK") ;
  else
   System.out.println("NO") ;
}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读