我正在创建一个带有示例和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;
}
}
}
在此解决方案中使用正则表达式有哪些主要优点?这样做最好的正则表达式是什么?
答案 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