2012-12-05 115 views
0

我已經嘗試過使用下面的正則表達式,但無法匹配我的要求。 任何人都可以幫我...必須匹配以下示例格式的IP地址 示例 - 111.222.222.111 - 222.112.1.2(假設)或單個IP地址。 這裏是我的正則表達式:正則表達式匹配兩個IP地址之間的連字符符號

(^((([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\\*)\\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\\*)$) | ^((([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\\*)\\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\\*))(\\-)^(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\\*)\\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\\*)$") 

回答

1

你可能要考慮不使用正則表達式。這是split解決了更簡單,更可讀的問題:

var ips = '111.222.222.111-222.112.1.2'; 

ips = ips.split('-'); 
var ip1 = ips[0].split('.'); 
var ip2 = ips[1].split('.'); 

// ip1 is the array ["111", "222", "222", "111"] 
// ip2 is the array ["222", "112", "1", "2"] 

爲了驗證他們,你只需要確保有四個元素所產生的陣列,以及parseInt函數的每個元素,並檢查其是否0之間和255像這樣(爲IP1):

var i, temp; 
if(ip1.length != 4){ 
    console.log("Invalid IP"); 
} 
for(i = 0; i < 4; i++){ 
    temp = parseInt(ip1[i], 10); 
    if(0 > temp || temp > 255){ 
     console.log("Invalid IP"); 
     break; 
    } 
} 

做那兩個IP地址,並確保只有2個IP地址在IPS(ips.length == 2)。

相關問題