Javascript jQuery+检查数组是否只包含IP地址

Javascript jQuery+检查数组是否只包含IP地址,javascript,jquery,ip,Javascript,Jquery,Ip,我有一个类似于console.log输出的数组: ["122.42.123.1", "122.42.123.1", "122.42.123.1", "awdawd", "awdawd"] 如何检查它是否只包含IP地址,如果是,则返回true?如果不象上面的例子,返回false 我尝试了在这里和谷歌上找到的各种功能,并在each循环中使用了它们,但这不起作用: //Get ip list from a textarea (each row = 1 ip) var content = $("#ba

我有一个类似于console.log输出的数组:

["122.42.123.1", "122.42.123.1", "122.42.123.1", "awdawd", "awdawd"]
如何检查它是否只包含IP地址,如果是,则返回true?如果不象上面的例子,返回false

我尝试了在这里和谷歌上找到的各种功能,并在each循环中使用了它们,但这不起作用:

//Get ip list from a textarea (each row = 1 ip)
var content = $("#banUList").val();
var ips = content.split("\n");
console.log(ips);

$(ips).each(function(){

    if(checkFunction($(this)) == false){
        //Wrong
    }else{
        //correct
    }

});
如果可能的话,我希望完全避免这个循环,并使用一个函数来检查整个数组中是否有任何不是IP的var。不管有多少个VAR

function isValidIp(value){
    // The code you got from google
    return true/false;
}

var valids = [];

$.each(ips, function(){
  if (isValidIp(this))  
      valids.push(this);
});
或者使用jQuery grep util:

如果您只想在所有地址都有效\无效时获得true\false:

var areAllValid = $.grep(ips, function(element){
                        return !isValidIp(element);
                     }).length === 0;

您可以使用正则表达式验证IP地址:

\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

挑战:比我更熟悉正则表达式的人可能会编写一个多行感知正则表达式,它可以在一次扫描中验证整个文本区域,而不使用任何循环。

如果不使用循环,根本不可能检查列表的所有条目。要完成源代码,请执行以下操作:

function arrayConsistsOfIPAddresses(ips) {
   var result = true;
   $(ips).each(function() {
     result &= isIPAddress($(this));
   }
   return result;
}
您可以使用jbabey发布的正则表达式来实现函数isIPAddress:


此功能将按照您的意愿执行:

function ipOnly(arr) {
    for(var i=0,l=arr.length;i<l;i++)
        if(!/^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/.test(arr[i])) 
            return false;
    return true;
}

小提琴:

这个不使用循环的版本怎么样


问题是如何检查所有条目是否都是ip,而不是提取所有有效的ip地址。很好的一点,这个grep函数,但如果至少有一个元素是ip地址,它就不会是真的。你不能避免for循环,但当它发现一个错误的ip时,你可以停止它。没有,因为它不能避免for循环:这正是我的想法。到目前为止,唯一一个没有循环的建议是我的。我想你们误解了OP。他不介意循环,只要他不必每次需要做检查时都做循环-他只是想要一个实用函数来为他做:
function isValidIPAddress(value) {
    var ipRegex = /b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/b
    return value.match(ipRegex); 
}
function ipOnly(arr) {
    for(var i=0,l=arr.length;i<l;i++)
        if(!/^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/.test(arr[i])) 
            return false;
    return true;
}
// regex from http://tools.netshiftmedia.com/regexlibrary/
var re = /((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})/g; 

function isArrIpOnly(arr) {
  return arr.toString().match(re).length==arr.length;
}


var arr = ["122.42.123.1", "122.42.123.1", "122.42.123.1", "awdawd", "awdawd"];   

alert(isArrIpOnly(arr));