zoukankan      html  css  js  c++  java
  • Common class for judge IPV6 or IPV4

    import java.util.regex.Pattern;
    
    import org.apache.http.annotation.Immutable;
    
    /**
     * A collection of utilities relating to InetAddresses.
     *
     * @since 4.0
     */
    @Immutable
    public class InetAddressUtils {
    
        private InetAddressUtils() {
        }
    
        private static final String IPV4_BASIC_PATTERN_STRING =
                "(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}" + // initial 3 fields, 0-255 followed by .
                 "([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"; // final field, 0-255
    
        private static final Pattern IPV4_PATTERN =
            Pattern.compile("^" + IPV4_BASIC_PATTERN_STRING + "$");
    
        private static final Pattern IPV4_MAPPED_IPV6_PATTERN = // TODO does not allow for redundant leading zeros
                Pattern.compile("^::[fF]{4}:" + IPV4_BASIC_PATTERN_STRING + "$");
    
        private static final Pattern IPV6_STD_PATTERN =
            Pattern.compile(
                    "^[0-9a-fA-F]{1,4}(:[0-9a-fA-F]{1,4}){7}$");
    
        private static final Pattern IPV6_HEX_COMPRESSED_PATTERN =
            Pattern.compile(
                    "^(([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,5})?)" + // 0-6 hex fields
                     "::" +
                     "(([0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,5})?)$"); // 0-6 hex fields
    
        /*
         *  The above pattern is not totally rigorous as it allows for more than 7 hex fields in total
         */
        private static final char COLON_CHAR = ':';
    
        // Must not have more than 7 colons (i.e. 8 fields)
        private static final int MAX_COLON_COUNT = 7;
    
        /**
         * Checks whether the parameter is a valid IPv4 address
         *
         * @param input the address string to check for validity
         * @return true if the input parameter is a valid IPv4 address
         */
        public static boolean isIPv4Address(final String input) {
            return IPV4_PATTERN.matcher(input).matches();
        }
    
        public static boolean isIPv4MappedIPv64Address(final String input) {
            return IPV4_MAPPED_IPV6_PATTERN.matcher(input).matches();
        }
    
        /**
         * Checks whether the parameter is a valid standard (non-compressed) IPv6 address
         *
         * @param input the address string to check for validity
         * @return true if the input parameter is a valid standard (non-compressed) IPv6 address
         */
        public static boolean isIPv6StdAddress(final String input) {
            return IPV6_STD_PATTERN.matcher(input).matches();
        }
    
        /**
         * Checks whether the parameter is a valid compressed IPv6 address
         *
         * @param input the address string to check for validity
         * @return true if the input parameter is a valid compressed IPv6 address
         */
        public static boolean isIPv6HexCompressedAddress(final String input) {
            int colonCount = 0;
            for(int i = 0; i < input.length(); i++) {
                if (input.charAt(i) == COLON_CHAR) {
                    colonCount++;
                }
            }
            return  colonCount <= MAX_COLON_COUNT && IPV6_HEX_COMPRESSED_PATTERN.matcher(input).matches();
        }
    
        /**
         * Checks whether the parameter is a valid IPv6 address (including compressed).
         *
         * @param input the address string to check for validity
         * @return true if the input parameter is a valid standard or compressed IPv6 address
         */
        public static boolean isIPv6Address(final String input) {
            return isIPv6StdAddress(input) || isIPv6HexCompressedAddress(input);
        }
    
    }
  • 相关阅读:
    05流程图和流程定义的操作
    04启动流程实例,任务的查询与完成
    03流程图的绘制与部署
    02数据库表的初始化方式
    01环境安装
    JavaScript基础和JavaScript内置对象:
    用手机、pid作为win电脑扩展屏
    H5新增特性之语义化标签
    盒模型
    CSS定位总结--static、relative、absolute、fixed
  • 原文地址:https://www.cnblogs.com/softidea/p/3334433.html
Copyright © 2011-2022 走看看