刚刚试了所谓的新版的用法。千万别问我是多新,由于我也不知道。。。javascript
<!DOCTYPE html> <html> <head> <script src="js/jquery.js"></script> <script src="js/jquery.validate.js"></script> <script> $().ready(function() { $("#registerForm").validate(); }); </script> </head> <body> <form id="registerForm" method="get" action=""> <fieldset> <p> <label for="cusername">用户名</label> <input id="cusername" name="username" type="text" data-rule-required="true" data-rule-rangelength="[2,10]" data-msg-required="用户名不能为空" data-msg-rangelength="用户名长度必须是{0}到{1}个字符"> </p> <p> <label for="cpassword">密码</label> <input id="cpassword" name="password" type="password" data-rule-required="true" data-rule-minlength="6" data-msg-required="密码不能为空" data-msg-minlength="密码必须很多于{0}位"> </p> <p> <label for="cconfirmpassword">确认密码</label> <input id="cconfirmpassword" name="confirmpassword" type="password" data-rule-required="true" data-rule-equalTo="#cpassword" data-msg-required="请再次输入密码" data-msg-equalTo="两次输入的密码不一致"> </p> <p> <label for="cemail">邮箱</label> <input id="cemail" name="email" data-rule-required="true" data-rule-email="true" data-msg-required="邮箱不能为空" data-msg-email="邮箱的格式不正确"/> </p> <p> <input type="submit" value="提交"> </p> </fieldset> </form> </body> </html>
我的感受这种用法比经过javascript自定义验证规则,要方便和简单多了。昨天在刚开始自定义的时候,老是没法正确的提示,当时彻底不知道为何。直到检查了多遍才发现,原来是由于个人rules里的键值对之间漏了一个逗号。因此,若是默认的校验规则已经知足你的验证需求,而你只是想改变一下提示语。那我我的建议你用这种新版的用法,固然也能够用 系列(一) 里的方法二。具体看状况本身选择。html
还有我上面的提示都是默认的黑色,身为提示,那样也太没存在感了。java
为了增长存在感,你只须要在<head></head>之间插入下面的代码就能够了。jquery
<style> #registerForm label.error{ margin-left: 10px; color:red; } </style>
请注意上面的#号后面跟着是表单的ID,你须要改为你本身相应的表单ID。我昨天尝试的时候,找到的资料里写的是#frm。当时我还觉得#frm又是我没接触过的新用法呢,我还一直疑惑,为何个人提示不显示成红色。基础差哎。。。正则表达式
若是默认的验证规则已经不能知足你的需求,那么接下来,你就得自定义验证规则了。ide
好比,这里有一个需求,要你检查用户输入的邮编是否合法,这时你就得自定义验证规则了,使用的方法是jQuery.validator.addMethod()。函数
<!DOCTYPE html> <html> <head> <script src="js/jquery.js"></script> <script src="js/jquery.validate.js"></script> <script> $().ready(function() { jQuery.validator.addMethod("isZipCode", function(value, element) { var tel = /^[0-9]{6}$/; return this.optional(element) || (tel.test(value)); }, "请正确填写您的邮政编码"); $("#registerForm").validate({ rules : { zipCode : { required : true,//对于required的提示语句没有进行任何的处理,他会使用默认的英文的提示。 isZipCode : true//isZipCode为自定义的验证规则 } }, messages : {//当你不写提示语句,他会使用上面方法返回的提示。 zipCode : { isZipCode : '请输入正确的邮编' } } }); }); </script> <style> #registerForm label.error { margin-left: 10px; color: red; } </style> </head> <body> <form id="registerForm" method="get" action=""> <fieldset> <p> <label for="czipCode">中国邮编</label> <input id="czipCode" name="zipCode" /> </p> <p> <input type="submit" value="提交"> </p> </fieldset> </form> </body> </html>
固然,你也能够把这个验证规则提取出来存到一个JS文件里,而后在要用的地方引入JS文件。ui
jQuery.validator.addMethod("isZipCode", function(value, element) { var tel = /^[0-9]{6}$/; return this.optional(element) || (tel.test(value)); }, "请正确填写您的邮政编码");
<!DOCTYPE html> <html> <head> <script src="js/jquery.js"></script> <script src="js/jquery.validate.js"></script> <script src="js/validate.expand.js"></script> <script> $().ready(function() { $("#registerForm").validate({ rules : { zipCode : { required : true,//对于required的提示语句没有进行任何的处理,他会使用默认的英文的提示。 isZipCode : true//isZipCode为自定义的验证规则 } }, messages : {//当你不写提示语句,他会使用方法返回的提示。 zipCode : { isZipCode : '请输入正确的邮编' } } }); }); </script> <style> #registerForm label.error { margin-left: 10px; color: red; } </style> </head> <body> <form id="registerForm" method="get" action=""> <fieldset> <p> <label for="czipCode">中国邮编</label> <input id="czipCode" name="zipCode" /> </p> <p> <input type="submit" value="提交"> </p> </fieldset> </form> </body> </html>
接下来,就要好好说说jQuery.validator.addMethod() 这个方法,这个方法一共有三个参数。this
第一个参数 :“isZipCode” 是定义方法名,必须保证方法名惟一。编码
第二个参数:是一个回调(callback)函数。
这个回调函数有三个参数:
第一个:value ,是当前被验证的元素的值。
第二个:element,是当前被验证的元素。
第三个:param,是传入的参数,例如: minlength : 6 里的参数为6; rangelength:[2,10] 里的参数为2和10。当你没有传入参数,这个能够省略不写。
在这个回调函数里有一个this.optional(element)函数要特别注意。当表单的输入值为空时,即element的值为空,this.optional(element)的返回值为true,相似于判空操做,也就是说该表单输入项不是必填项,当不填时经过了验证。若是element的值不为空,this.optional(element)的返回值就是false,这时就要根据 || 后面的验证来判断最终的返回为true 或false。因此当某个输入项不是必填项但若是填写了又须要按照必定的规则来验证的时候,必定要记得带上this.optional(element)。
第三个参数:验证的提示信息。
这个参数能够直接是一句提示信息,例如,"这是必填字段";也能够经过建立函数jQuery.validator.format(value)来显示,例如,$.validator.format("请输入长度在 {0} 到 {1} 之间的字符串"),其中 {0} {1} 表明该方法的参数,也就是回调(callback)函数里的第三个参数param。
官网提供的additional-methods.js里包含一些经常使用的验证方式,好比lettersonly,ziprange,nowhitespace等,但我粗略的看了一下,发现大部分只是仅供参考,实用性不强,不能直接使用。
我整理了几个网上找到的验证规则,固然也仅供参考。验证规则的核心就是正则表达式,这个得学。
// 邮政编码验证 jQuery.validator.addMethod("isZipCode", function(value, element) { var tel = /^[0-9]{6}$/; return this.optional(element) || (tel.test(value)); }, "请正确填写您的邮政编码"); // 手机号码验证 jQuery.validator.addMethod("mobile", function(value, element) { var length = value.length; var mobile = /^(13[0-9]|14[0-9]|15[0-9]|18[0-9])\d{8}$/; return this.optional(element) || (length == 11 && mobile.test(value)); }, "手机号码格式错误"); // QQ号码验证 jQuery.validator.addMethod("qq", function(value, element) { var tel = /^[1-9]\d{4,10}$/; return this.optional(element) || (tel.test(value)); }, "qq号码格式错误"); // IP地址验证 jQuery.validator.addMethod("ip", function(value, element) { 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 this.optional(element) || (ip.test(value) && (RegExp.$1 < 256 && RegExp.$2 < 256 && RegExp.$3 < 256 && RegExp.$4 < 256)); }, "Ip地址格式错误"); // 字母和数字的验证 jQuery.validator.addMethod("chrnum", function(value, element) { var chrnum = /^([a-zA-Z0-9]+)$/; return this.optional(element) || (chrnum.test(value)); }, "只能输入数字和字母(字符A-Z, a-z, 0-9)"); // 中文的验证 jQuery.validator.addMethod("chinese", function(value, element) { var chinese = /^[\u4e00-\u9fa5]+$/; return this.optional(element) || (chinese.test(value)); }, "只能输入中文");