2012-11-28 45 views
0

在我的項目,我能夠驗證IP地址是這樣的:如何在jQuery中使用正則表達式驗證多個IP地址以及IPv6?

function (value, element) { 
    var octet = '(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])'; 
    var ip = '(?:' + octet + '\\.){3}' + octet; 
    var ipRE = new RegExp('^' + ip + '$'); 
    return (ipRE.test(value)); 
} 

目前,它接受一個I​​Pv4版本addressses。我也想接受多種IPv4/IPv6版本格式。

實施例:

'0:0:0:0:0:ffff:192.1.56.10,172.30.60.1,fe80:41b2:41b2:935c:b113:da1a' 

我使用jQuery.validator API來執行驗證。

請提供建議。

回答

0

以下代碼我已經用來接受jQuery中的IPv6和Ipv4版本。

function checkipv6(str) { 
      var perlipv6regex = "^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$"; 
      var aeronipv6regex = "^\s*((?=.*::.*)(::)?([0-9A-F]{1,4}(:(?=[0-9A-F])|(?!\2)(?!\5)(::)|\z)){0,7}|((?=.*::.*)(::)?([0-9A-F]{1,4}(:(?=[0-9A-F])|(?!\7)(?!\10)(::))){0,5}|([0-9A-F]{1,4}:){6})((25[0-5]|(2[0-4]|1[0-9]|[1-9]?)[0-9])(\.(?=.)|\z)){4}|([0-9A-F]{1,4}:){7}[0-9A-F]{1,4})\s*$"; 

      var regex = "/" + perlipv6regex + "/"; 
      return (/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/.test(str)); 
} 



function (value, element) 
{ 

      var returnvalue; 
      alert("IPcheck " + value); 
      var result = value.split(","); 

      for (i = 0; i < result.length; i++) { 

       var octet = '(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])'; 

       if (result[i].split(":").length == 1) { 
        var ip = '(?:' + octet + '\\.){3}' + octet; 
        var ipRE = new RegExp('^' + ip + '$'); 
        returnvalue = ipRE.test(result[i]); 

       } 
       else { 
        returnvalue = checkipv6(result[i]); 
       } 
       // var octet= '([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])' 
       //var octet = '(?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]|[01]?\d\d?)' 
       //    var ip = '(?:' + octet + '\\.){3}' + octet; 
       //    var ipRE = new RegExp('^' + ip + '$'); 
       if (returnvalue == false) { 
        return returnvalue; 
       } 
      } 
      return returnvalue; 
     }, 
     "<br/>Please enter a Valid IP Address" 
    ); 
0

我發現這個正則表達式的某個時候備份有用的IP地址驗證

(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] | [01] \ d \ d)

希望幫助

+0

感謝您的回覆。但它沒有幫助 –

+0

請分享該鏈接 –

+0

這個正則表達式只能使用IPv4。結合4和6是可行的,但繁瑣。我會在答案中寫出某種開始。 –

0

編輯:??作品?對於v4和v6在同一個函數中。缺點:依賴於PHP5。

<?php 
function checkIP($IPaddr) { 
    $packetNot = inet_pton($IPaddr); 
    if ($packetNot === FALSE) return false; 
    if (inet_ntop($packetNot) === FALSE) return false; 
    return true; 
} ?> 
+0

我試過這個,但它不工作 –

+0

你試過什麼IPv6地址? –

+0

fe80:41b2:41b2:935c:b113:da1a –

1

這將是簡單的拆分輸入的逗號,然後分析每個部分:找出如果地址是IPv4或IPv6,然後用適當的正則表達式吧。

相關問題