您的位置:首页 > Web前端 > JavaScript

JavaScript学习 CodeWars 打怪升级日记 判断输入字符串是否符合IPv4地址标准

2016-07-01 09:41 459 查看
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函数对字符串的转换规则 看这里吧

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息