⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipaddresspatternvalidator.java

📁 本系统有十分强大的功能
💻 JAVA
字号:
/*******************************************************************************
 * ***** BEGIN LICENSE BLOCK Version: MPL 1.1
 * 
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
 * 
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
 * the specific language governing rights and limitations under the License.
 * 
 * The Original Code is the OpenCustomer CRM.
 * 
 * The Initial Developer of the Original Code is Thomas Bader (Bader & Jene
 * Software-Ingenieurb黵o). Portions created by the Initial Developer are
 * Copyright (C) 2006 the Initial Developer. All Rights Reserved.
 * 
 * Contributor(s): Thomas Bader <thomas.bader@bader-jene.de>
 * 
 * ***** END LICENSE BLOCK *****
 */
package org.opencustomer.framework.util.validator;

public final class IpAddressPatternValidator implements Validator
{
    private static String WILDCARD_PATTERN = 
        DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\."+DomainValidator.OCTET +
        "|" +
        DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\.\\*{1}" +
        "|" +
        DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\.\\*{1}" +
        "|" +
        DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\."+DomainValidator.OCTET +
        "|" +
        DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\.\\*{1}" +
        "|" +
        DomainValidator.OCTET+"\\."+DomainValidator.OCTET+"\\.\\*{1}" +
        "|" +
        DomainValidator.OCTET+"\\.\\*{1}" +
        "|" +
        "\\*{1}";

    private static IpAddressPatternValidator instance;
    
    public static IpAddressPatternValidator getInstance() {
        if(instance == null)
            instance = new IpAddressPatternValidator();
        
        return instance;
    }
    
    public boolean validate(String humanPattern) {
        boolean isValid = false;
        
        if(humanPattern != null) {
            isValid = humanPattern.matches(WILDCARD_PATTERN);
        }
        
        return isValid;
    }

    public boolean match(String pattern, String ipAddress)
    {
        boolean isValid = false;
        
        if(ipAddress != null)
        {
            if(validate(pattern))
                return ipAddress.matches(createPattern(pattern));
            else
                return false;
        }
        
        return isValid;
    }
    
    private String createPattern(String humanPattern) {
        StringBuilder ipv4Pattern = new StringBuilder();
        StringBuilder ipv6Pattern = new StringBuilder();
        
        int blocks = 0;
        for(String part : humanPattern.split("\\."))
        {
            if(part.matches(DomainValidator.OCTET))
            {
                if(blocks > 0){
                    ipv4Pattern.append("\\.");
                    ipv6Pattern.append("\\.");
                }

                ipv4Pattern.append(part);
                ipv6Pattern.append(part);

                blocks++;
            }
        }

        fillBlocks(ipv4Pattern, blocks, 4);
        fillBlocks(ipv6Pattern, blocks, 6);
        
        return ipv4Pattern.toString()+"|"+ipv6Pattern;
    }
    
    private static void fillBlocks(StringBuilder pattern, int existingBlocks, int targetBlocks) {
        for(int i=existingBlocks; i<targetBlocks; i++)
        {
            if(i>0) {
                pattern.append("\\.\\d{1,3}");
            } else {
                pattern.append("\\d{1,3}");
            }
        }
    }
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -