2012-05-16 21 views
0

我有這樣的(從輸出的console.log)數組:的jQuery +檢查一個數組只包含IP不會忽略

["122.42.123.1", "122.42.123.1", "122.42.123.1", "awdawd", "awdawd"] 

我怎麼能檢查它是否只包含IP地址,如果是這樣return true?並且,如果它不(像上面的例子)return false

我都試過,我發現這裏和谷歌(like this one),並在每個循環中使用它們不同的功能,但是,這並不工作:

//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。不管有多少vars

+0

不能避免'for'循環,但你可以阻止它,當它找到一個錯誤的IP與'break' – DoubleYo

回答

4

此功能會按照你希望:

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; 
} 

小提琴:http://jsfiddle.net/DWQzm/

+0

這正是我想到的! – Andrej

+0

不,它不是,因爲它不能避免for循環:) – Tibor

+0

完全是我的想法。只有建議至今沒有一個循環是我的。 – mplungjan

1
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:

var valids = $.grep(ips, function(element){ 
       return isValidIp(element); 
      }); 

如果你只是想獲得真\假當所有的地址是有效\無效:

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

的問題是如何檢查是否所有條目IPS,不要解壓所有有效的IP地址。 – Yogu

+0

@Yogu。查看更新。 – gdoron

+0

好的一點,這個'grep'函數,但是如果至少有一個元素是一個ip地址,將不會'areAllValid'爲真? – Yogu

1

你可以使用正則表達式來驗證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 

http://www.regular-expressions.info/examples.html

挑戰:更有經驗的人用正則表達式比我大概可以寫多行的正則表達式的認識,可以在一次掃描驗證整個textarea的不使用任何循環。

+0

我認爲他已經有了IP檢查。 – gdoron

1

這是根本不可能檢查一個列表的所有條目不使用循環。爲了方便您的源代碼:

function arrayConsistsOfIPAddresses(ips) { 
    var result = true; 
    $(ips).each(function() { 
    result &= isIPAddress($(this)); 
    } 
    return result; 
} 

您可以使用發佈的jbabey的正則表達式來實現該功能isIPAddress

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); 
} 
0

這個版本如何不使用al空中接力 DEMO

// 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)); 
相關問題