CodeWars 是一个在线编程网站,其奖励机制像打怪升级。你不能查看高于你级别的问题的答案。除非自己通过提交测试。通过提交之后可以看到各种解法排行榜 。通过对比自己解法和排行榜对比,可以找到差距,提高能力。
题目描述 : In this kata you have to write a method to verify the validity of IPv4 addresses. 也就是编写一个函数判断IPv4地址是否有效。
例子 :
Example of valid inputs: (有效的输入)
"1.1.1.1"
"127.0.0.1"
"255.255.255.255"
Example of invalid input: (无效的输入)
"1444.23.9"
"153.500.234.444"
"-12.344.43.11"
分析 :IPv4地址标准形式一共32为,四组,每组数字在0~255之间。除第一位数字,后面前导不能为0,比如“153.010.234.125” 010就不符合标准;其次中间不能有字符,“123.a1.2.3”这样也是无效的;空格也是不可以的。 还有一种比较特殊的输入“....”即空的数字。所以判断需要判断这几种情况
①字符串不是四组;②每组数字不在0~255之间;③数字有前导0④有特殊字符⑤有空格。
看代码:
function isValidIP(str) {
var ipArr = str.split('.');
var length = ipArr.length;
if (length != 4) { return false ;} //输入不是四组
for(var i =0 ; i < length ; ++ i)
{
if ( typeof parseInt(ipArr[i]) == "number" && isNaN(parseInt(ipArr[i])) != true) { //转为number类型并且 判断是否有特殊字符
if (ipArr[i][0] == 0 && ipArr[i].length > 1) { return false ;} //有前导0的情况,注意不要转为Number再判断
if ( parseInt(ipArr[i] ) <0 || parseInt(ipArr[i]) > 255) { return false ;} //是否在0-255之间
if (ipArr[i].trim() != ipArr[i]) { return false ;} //是否含有空格
} else {
return false ;
}
}
return true ;
}
这里一点需要注意:利用Number 或者 parseInt()将字符转为数字的时候,具体装换规则和注意事项
看这里 ,当转换结果为NaN时,不能用
"Number() == NaN "判断,因为NaN 不等于NaN ,想要判断是否为NaN 用isNaN()函数。
看一下简单的 :
function isValidIP2(str) {
return str.split('.').filter(function(v){return v==Number(v).toString() && Number(v)<256 && Number(v) >= 0}).length==4;
}
所有的特殊情况由
v==Number(v).toString() 负责判断,秘诀就在于 Number函数对字符串的转换规则 看这里吧 。
}