ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

468. 验证IP地址

2021-05-14 20:00:23  阅读:183  来源: 互联网

标签:IParr 468 验证 IP IPv6 length let IP地址 charAt


编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址。

  • 如果是有效的 IPv4 地址,返回 "IPv4" ;
  • 如果是有效的 IPv6 地址,返回 "IPv6" ;
  • 如果不是上述类型的 IP 地址,返回 "Neither" 。

IPv4 地址由十进制数和点来表示,每个地址包含 4 个十进制数,其范围为 0 - 255, 用(".")分割。比如,172.16.254.1

同时,IPv4 地址内的数不会以 0 开头。比如,地址 172.16.254.01 是不合法的。

IPv6 地址由 8 组 16 进制的数字来表示,每组表示 16 比特。这些组数字通过 (":")分割。比如,  2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个有效的地址。而且,我们可以加入一些以 0 开头的数字,字母可以使用大写,也可以是小写。所以, 2001:db8:85a3:0:0:8A2E:0370:7334 也是一个有效的 IPv6 address地址 (即,忽略 0 开头,忽略大小写)。

然而,我们不能因为某个组的值为 0,而使用一个空的组,以至于出现 (::) 的情况。 比如, 2001:0db8:85a3::8A2E:0370:7334 是无效的 IPv6 地址。

同时,在 IPv6 地址中,多余的 0 也是不被允许的。比如, 02001:0db8:85a3:0000:0000:8a2e:0370:7334 是无效的。

 

示例 1:

输入:IP = "172.16.254.1"
输出:"IPv4"
解释:有效的 IPv4 地址,返回 "IPv4"

示例 2:

输入:IP = "2001:0db8:85a3:0:0:8A2E:0370:7334"
输出:"IPv6"
解释:有效的 IPv6 地址,返回 "IPv6"

示例 3:

输入:IP = "256.256.256.256"
输出:"Neither"
解释:既不是 IPv4 地址,又不是 IPv6 地址

示例 4:

输入:IP = "2001:0db8:85a3:0:0:8A2E:0370:7334:"
输出:"Neither"

示例 5:

输入:IP = "1e1.4.5.6"
输出:"Neither"

 

提示:

  • IP 仅由英文字母,数字,字符 '.' 和 ':' 组成。
/**
 * @param {string} IP
 * @return {string}
 */
var validIPAddress = function (IP) {
    let out = "Neither";// IPv4,IPv6,Neither

    // IPv4
    if (IP.includes(".")) {
        // check contain only . and number
        for (let i = 0; i < IP.length; i++) {
            if (!((IP.charCodeAt(i) > 47 && IP.charCodeAt(i) < 58) || IP.charAt(i) == '.')) {
                return "Neither";
            }
        }

        let IParr = IP.split(".");

        // System.out.println(Arrays.toString(IParr));
        if (IParr.length == 4) {
            if (IParr[0].length > 3 || IParr[0].length < 1 || IParr[1].length > 3 || IParr[1].length < 1
                    || IParr[2].length > 3 || IParr[2].length < 1 || IParr[3].length > 3
                    || IParr[3].length < 1) {
                return "Neither";
            }
            let n1 = parseInt(IParr[0]);
            let n2 = parseInt(IParr[1]);
            let n3 = parseInt(IParr[2]);
            let n4 = parseInt(IParr[3]);
            if (n1 <= 255 && n1 >= 0 && n2 <= 255 && n2 >= 0 && n3 <= 255 && n3 >= 0 && n4 <= 255 && n4 >= 0) {
                let str = (n1 + "." + n2 + "." + n3 + "." + n4);
                if (str.length == IP.length) {
                    out = "IPv4";
                }
            }
        }
    }

    // IPv6
    let someChar = ':';
    let count = 0;

    for (let i = 0; i < IP.length; i++) {
        if (IP.charAt(i) == someChar) {
            count++;
        }
    }

    // System.out.println(count);

    if (count == 7) {
        for (let i = 0; i < IP.length; i++) {
            if (!((IP.charCodeAt(i) > 47 && IP.charCodeAt(i) < 58) || IP.charAt(i) == ':' || IP.charAt(i) == 'a'
                    || IP.charAt(i) == 'b' || IP.charAt(i) == 'c' || IP.charAt(i) == 'd' || IP.charAt(i) == 'e'
                    || IP.charAt(i) == 'f' || IP.charAt(i) == 'A' || IP.charAt(i) == 'B' || IP.charAt(i) == 'C'
                    || IP.charAt(i) == 'D' || IP.charAt(i) == 'E' || IP.charAt(i) == 'F')) {
                return "Neither";
            }
        }

        let IParr = IP.split(":");
        // System.out.println(Arrays.toString(IParr));

        // System.out.println(IParr.length);
        if (IParr.length == 8) {
            if (IParr[0].length > 4 || IParr[0].length < 1 || IParr[1].length > 4 || IParr[1].length < 1
                    || IParr[2].length > 4 || IParr[2].length < 1 || IParr[3].length > 4
                    || IParr[3].length < 1 || IParr[4].length > 4 || IParr[4].length < 1
                    || IParr[5].length > 4 || IParr[5].length < 1 || IParr[6].length > 4
                    || IParr[6].length < 1 || IParr[7].length > 4 || IParr[7].length < 1) {
                return "Neither";
            }

            if (IParr[0].length <= 4 && IParr[1].length <= 4 && IParr[2].length <= 4 && IParr[3].length <= 4
                    && IParr[4].length <= 4 && IParr[5].length <= 4 && IParr[6].length <= 4
                    && IParr[7].length <= 4) {
                let n1 = parseInt(IParr[0], 16);
                let n2 = parseInt(IParr[1], 16);
                let n3 = parseInt(IParr[2], 16);
                let n4 = parseInt(IParr[3], 16);
                let n5 = parseInt(IParr[4], 16);
                let n6 = parseInt(IParr[5], 16);
                let n7 = parseInt(IParr[6], 16);
                let n8 = parseInt(IParr[7], 16);
                if (n1 <= 65535 && n1 >= 0 && n2 <= 65535 && n2 >= 0 && n3 <= 65535 && n3 >= 0 && n4 <= 65535
                        && n4 >= 0 && n5 <= 65535 && n5 >= 0 && n6 <= 65535 && n6 >= 0 && n7 <= 65535 && n7 >= 0
                        && n8 <= 65535 && n8 >= 0) {
                    out = "IPv6";
                }
            }
        }
    }
    return out;
};

 

标签:IParr,468,验证,IP,IPv6,length,let,IP地址,charAt
来源: https://blog.csdn.net/allway2/article/details/116803723

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有