数组比较?

时间:2016-03-02 14:05:09

标签: regex

我正在创建一个带有示例和ip地址的函数。对于前者

compare('192.168.*','192.168.0.42');  

asterix表示ip的以下部分可以是任何内容。根据示例和ip是否匹配,函数返回true或false。我试过这种解决方案。

var compare = function(example, ip){
  var ex = example.split(".");
  var ip = ip.split(".");
  var t = 0;
  for(var i=0; i<4; i++){
    if(ex[i] == ip[i] || ex[i] == "*" || typeof ex[i] === 'undefined' && ex[i-1] == "*"){
          t++
          if(t==4){
            return true
          }
       }else{
        return false;
      }
  }
}

在此解决方案中使用正则表达式有哪些主要优点?这样做最好的正则表达式是什么?

2 个答案:

答案 0 :(得分:1)

检查它们是否不相等然后只返回false?

var compare = function(example, ip){

  // You should have some basic IP validations here for both example and ip.
  
  var ex = example.split(".");
  var ip = ip.split(".");
  for(var i=0; i<ex.length; i++){
    
      if(ex[i]=='*')
        break;
    
      if(ex[i]!=ip[i])
        return false;
  
  }
  
  return true;
}

alert(compare('333.321.*','333.321.345.765'));  
alert(compare('333.322.*','333.321.345.765'));  
alert(compare('333.321.345.*','333.321.345.765'));  

答案 1 :(得分:0)

使用正则表达式会更好。试试这个:

function compare(example, ip) {
  var regexp = new RegExp('^' + example.replace(/\./g, '\\.').replace(/\*/g, '.*'));
  return regexp.test(ip);
}

compare('192.168.*', '192.168.0.42'); // => true
compare('192.167.*', '192.168.0.42'); // => false

这样做,它将您的模式转换为正则表达式。正则表达式在匹配字符串方面非常强大。它还包括这样的案例:

compare('192.168.*.42', '192.168.1.42'); // => true
compare('192.167.*.42', '192.168.1.43'); // => false