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"))