2012-07-02 99 views
1

下面是我编写的代码将IP地址屏蔽并使用jQuery进行验证的代码片段。但是,我收到有效IP地址的错误消息(如222.222.222.222)。有人可以帮忙吗?jQuery IP地址验证失败

  //Validate the form 
      $('#form').validate({ 
       rules: { 
        ip: { 
         required: true, 
         IP4Checker: true 
        }, 
        subnet: { 
         required: true, 
         IP4Checker: true 
        }, 
        gateway: { 
         required: true, 
         IP4Checker: true 
        }, 
        dns1: { 
         required: true, 
         IP4Checker: true 
        }, 
        dns2: { 
         required: true, 
         IP4Checker: true 
        } 
       }, 
       messages: { 
        ip: "Please enter a valid IP Address", 
        subnet: "Please enter a valid Subnet Mask Address", 
        gateway: "Please enter a valid Gateway Address", 
        dns1: "Please enter a valid DNS1 Address", 
        dns2: "Please enter a valid DNS2 Address" 
       } 
      }); 

      //Validate the IP addresses 
      $(function() { 
       $.validator.addMethod('IP4Checker', function(value) { 
        var ip = "^(?:(?: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]?)$"; 
        return value.match(ip); 
       }); 
      }); 

      //Set mask for IP address fields 
      $(".ip").mask("999 . 999 . 999 . 999"); 

      //Store numbers in hidden field 
      $(".ip").blur(function() { 

       //Create char array from phone number field 
       var charArray = $(this).val().split(""); 

       var num = ""; 

       //taking the input 
       $.each(charArray, function(index, value) { 
        num = num + value; 
       }); 
      }); 

回答

2

您正则表达式缺少其|字符,即。

\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]?) 

还要注意如果你不需要检查它是0-255

之间有效的IP地址也可以是任何\需要转义本身,所以你能缩短这

\b(?:\d{1,3}\.){3}\d{1,3}\b 

这将是\

reference

UPDATE

OP显示小提琴并没有读过上面的线也面具有空格的任何一方。所以正则表达式永远不会有效,因为掩码添加了空格。

fixed Fiddle

+0

更换你的函数我尝试过,但它力的工作,对不起。我也尝试过其他一些正则表达式,但它也有效。 请参考这个小提琴:http://jsfiddle.net/K9b9R/4/ –

+0

看看我的更新应该看到问题 – AbstractChaos

+0

哇,那很奇怪。我想到了这一点,并删除了这些空间。但是我认为那次我没有使用这个正则表达式。非常感谢! :) –

1

只是

//IP V4 

jQuery.validator.addMethod("IP4Checker", function(value, element, param) { 
return this.optional(element) || /^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(value); 



//IP V6 

jQuery.validator.addMethod("IP6Checker", function(value, element, param) { 
return this.optional(element) || /^((([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})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value); 
});