【LeetCode] 468。検証IPアドレス

1タイトル

入力文字列が有効なIPv4アドレスまたはIPv6アドレス、またはどちらであるかどうかをチェックする機能を記述します。

IPv4のアドレスは正準(「」)、4つの10進数で構成されてドット進数で表される各0から255までの範囲の、ドットで区切られる、例えば、172.16.254.1。

また、IPv4の先行ゼロは、無効です。例えば、アドレス172.16.254.01が無効です。

IPv6アドレスは4桁の16進数の8グループ、16ビットを表す各グループとして表されています。グループは、コロン(「:」)で区切られます。例えば、アドレス2001:0DB8:0000:0000:85a3 8a2e:0370:7334は有効なものです。また、我々は、4桁の16進数と大文字のものへのアドレスでいくつかの低ケースの文字の間でそう2001年、いくつかの先行ゼロを省略することができます:DB8:0:0:85a3 8A2E:0370:7334(これも有効なIPv6アドレスであります)先行ゼロと上部ケースを使用して省略。

シンプルさを追求するために:):しかし、我々は2つの連続したコロンを(使用して単一の空のグループとゼロ値の連続したグループに代わるものではありません。たとえば、2001:0DB8:85a3 :: 8A2E:0370:7334に無効なIPv6アドレスです。

また、IPv6での余分な先行ゼロも無効です。たとえば、アドレス02001:0DB8:0000:0000:85a3 8a2e:0370:7334は無効です。

注:入力文字列に余分なスペースや特殊文字が存在しないと仮定して。

例1:
入力: "172.16.254.1"

出力: "IPv4の"

説明:これは、「IPv4の」を返し、有効なIPv4アドレスです。
例2:
入力: "2001:0DB8:85a3:0:0:8A2E:0370:7334"

出力: "IPv6の"

説明:これは、有効なIPv6アドレス、リターンの「IPv6」です。
例3:
入力: "256.256.256.256"

出力:「どちらも」

説明:これは、IPv4アドレスやIPv6アドレスでもありません。

2つのアイデア&&コード

私たちは、コーナーケースの多様性を考慮する必要があります

  • 1E1この文字列は1に解析することができます
/**
 * @param {string} IP
 * @return {string}
 */
var validateIPv4 = function(IP) {
    function valudateNum(ar) {
        var num = +ar;
        return ar !== '' && !ar.includes('e') && num >=0 && num <=255 && !(ar.length > 1 && (ar[0] === '0' || ar[0] === '-'));
    }
    var arr= IP.split('.');
    if(arr.length === 4) {
        for(let element of arr) {
            if(!valudateNum(element)) return false;
        }
        return true;
    }
    return false;
}

function validateIPv6(IP) {
    function validateNum(ar) {
        if(ar === '' || ar.length > 4) return false;
        for(let element of ar) {
            if(!/^[0-9A-Fa-f]$/.test(element)) return false;
        }
        return true;
    }
    var arr = IP.split(":");
    if(arr.length > 8) return false;
    for(let element of arr) {
        if(!validateNum(element)) return false;
    }
    return true;
}
var validIPAddress = function(IP) {
    if(validateIPv4(IP)) return "IPv4";
    else if(validateIPv6(IP)) return "IPv6";
    return "Neither"; 
};
console.log(validIPAddress("20EE:Fb8:85a3:0:0:8A2E:0370:7334:12"))
console.log(validIPAddress('2001:0db8:85a3:0:0:8A2E:0370:7334'))
console.log(validIPAddress("256.256.256.256"))
console.log(validIPAddress("172.16.254.1"))

おすすめ

転載: www.cnblogs.com/achaohz/p/11786037.html
おすすめ