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

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函数对字符串的转换规则 看这里吧  。

}




你可能感兴趣的:(JavaScript学习 CodeWars 打怪升级日记 判断输入字符串是否符合IPv4地址标准)