2016-03-02 183 views
0

我正在做一个函数,它需要一个例子和一个ip地址。例如。数组比较?

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

asterix表示ip的以下部分可以是任何东西。该函数根据example和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; 
     } 
    } 
} 

在此解决方案中使用正则表达式的主要优点是什么?什么是最好的正则表达式来做到这一点?

+0

正则表达式是用于字符串比较,所以你可以遍历数组,并使用正则表达式来测试每个值。 –

+0

您对JavaScript或Java的问题? –

回答

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'));

+0

有效,直到你想要“333.444。*。555”这样的东西。 – zzzzBov

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