jQuery之Validate表單驗證(一)
阿新 • • 發佈:2018-12-30
jQuery 是一個快速、簡單的JavaScript 庫, 它簡化了HTML 檔案的traversing,事件處理、動畫、Ajax 互動,從而方便了網頁製作的快速發展。 jQuery Validate 外掛為表單提供了強大的驗證功能,讓客戶端表單驗證變得更簡單。
廢話不多說,開始demo演示:
前端html程式碼展示:
<h1>員工資訊錄入</h1> <form name="empForm" id="empForm" method="get" action="#"> <table> <tr> <td>真實姓名(不能為空 ,沒有其他要求)</td> <td><input type="text" id="realname" name="realname" /> </td> </tr> <tr> <td>登入名(登入名不能為空,長度應該在5-8之間:</td> <td><input type="text" id="username" name="username" /></td> </tr> <tr> <td>密碼(不能為空,長度6-12之間):</td> <td><input type="password" id="pwd" name="pwd" /></td> </tr> <tr> <td>重複密碼密碼(不能為空,長度6-12之間):</td> <td><input type="password" id="pwd2" name="pwd2" /></td> </tr> <tr> <td>性別(必選其一)</td> <td> <input type="radio" id="male" value="m" name="sex" />男 <input type="radio" id="female" value="f" name="sex" />女 <label for="sex" class="error" style="display: none;">性別必選</label> </td> </tr> <tr> <td>年齡(必填26-50):</td> <td><input type="text" id="age" name="age" /></td> </tr> <tr> <td>你的學歷:</td> <td> <select name="edu" id="edu"> <option value="">-請選擇你的學歷-</option> <option value="a">專科</option> <option value="b">本科</option> <option value="c">研究生</option> <option value="e">碩士</option> <option value="d">博士</option> </select> </td> </tr> <tr> <td>興趣愛好:</td> <td colspan="2"> <input type="checkbox" name="hobby" id="pp" value="0" />乒乓球 <input type="checkbox" name="hobby" id="ym" value="1" />羽毛球 <input type="checkbox" name="hobby" id="sw" value="2" />上網 <input type="checkbox" name="hobby" id="ly" value="3" />旅遊 <input type="checkbox" name="hobby" id="gw" value="4" />購物 <label for="hobby" class="error" style="display: none;">愛好必選</label> </td> </tr> <tr> <td align="left">電子郵箱:</td> <td><input type="text" id="email" name="email" /></td> </tr> <tr> <td align="left">身份證(15-18):</td> <td><input type="text" id="idcard" name="idcard" /></td> </tr> <tr> <td></td> <td><input type="submit" id="smtBtn" value="儲存"></td> </tr> </table> </form>
引入兩個js檔案:jquery-1.11.0.js(具體版本自己選擇)和jquery.validate.js
因為jquery.validate.js自帶的校驗資訊是英文,不便於使用者體驗,所以下面進行自定義校驗資訊,並自定義了身份證校驗規則,其它(郵箱,手機號)的都是同理!
<style> #registerForm label.error{ margin-left: 10px; color:red; } </style> <script type="text/javascript" src="../js/jquery-1.11.0.js" ></script> <script type="text/javascript" src="../js/jquery.validate.js" ></script> <script type="text/javascript"> /* * 自定義校驗規則 * 引數: * 1. 規則名稱 * 2. 規則校驗邏輯(匿名函式) * 匿名函式的引數: * a) value: 應用這項校驗規則的表單項的值 * b) element: 應用這項規則的表單項標籤物件 * c) params: 使用者在使用規則的時候,規則的值 */ $.validator.addMethod("idCard", function(value, element, params){ //校驗邏輯程式碼,根據校驗規則決定返回true或者false var reg = /^\d{15}(\d{2}(\d|X))?$/i; var result = reg.test(value); if(!result){ element.style.backgroundColor = "blue"; } //返回值 true表示校驗通過,false表示校驗不通過 return result; }); $("#empForm").validate({ rules:{ realname:{ required:true }, username:{ required: true, rangelength:[5, 8] }, pwd:{ required: true, rangelength:[6, 12] }, pwd2:{ required: true, equalTo:"#pwd" // equalTo:"#pwd",這個鍵值對裡的value是元素的ID值 }, sex:{ required:true }, age:{ required:true, range:[26, 50], digits:true }, edu:{ required:true }, hobby:{ required:true }, email:{ required:true, email:true }, idcard:{ required:true, idCard:true } }, messages:{ realname:{ required:"使用者名稱不能為空" }, username:{ required: "登入名不能為空", rangelength:"登入名長度應該是5~8位" }, pwd:{ required: "密碼不能為空", rangelength:"密碼長度必須是6~12位" }, pwd2:{ required: "確認密碼不能為空", equalTo:"兩次密碼輸入不一致" }, age:{ required:"年齡必填", range:"年齡必須是26~50之間", digits:"年齡必須是整數" }, edu:{ required:"學歷必選" }, email:{ required:"郵箱必填", email:"郵箱格式不正確" }, idcard:{ required:"身份證必填", idCard:"身份證格式不正確" } } }); </script>
通過以上測試,表單校驗可以基本滿足我們的簡單需求,但是我們不可能每次都要去重新編寫校驗規則,這也重複量太大,所以我們只需要定義好常用的規則,放在一個js檔案中,每次使用的話,我們可以在直接引用,也便於每次的修改,完善!
比如:以下就是我常用的並且自定義的jQueryFrom.js檔案,這個完全根據自己的喜好定義!
$(function() {
//jquery.validate
$("#jsForm,#login").validate({
submitHandler: function() {
//驗證通過後 的js程式碼寫在這裡
}
})
})
//下面是一些常用的驗證規則擴充套件
//配置錯誤提示的節點,預設為label,這裡配置成 span (errorElement:'span')
//下面有圖例展示
$.validator.setDefaults({
errorElement: 'span'
});
//配置通用的預設提示語
$.extend($.validator.messages, {
required: "這是必填欄位",
remote: "請修正此欄位",
email: "請輸入有效的電子郵件地址",
url: "請輸入有效的網址",
date: "請輸入有效的日期",
number: "請輸入有效的數字",
equalTo: "你的輸入不相同",
extension: "請輸入有效的字尾",
maxlength: $.validator.format("最多可以輸入 {0} 個字元"),
minlength: $.validator.format("最少要輸入 {0} 個字元"),
rangelength: $.validator.format("請輸入長度在 {0} 到 {1} 之間的字串"),
range: $.validator.format("請輸入範圍在 {0} 到 {1} 之間的數值"),
max: $.validator.format("請輸入不大於 {0} 的數值"),
min: $.validator.format("請輸入不小於 {0} 的數值")
});
/*-------------擴充套件驗證規則------------*/
//郵箱
jQuery.validator.addMethod("mail", function(value, element) {
var mail = /^[a-z0-9._%-] [email protected]([a-z0-9-]+\.)+[a-z]{2,4}$/;
return this.optional(element) || (mail.test(value));
}, "郵箱格式不對");
//手機驗證規則
jQuery.validator.addMethod("mobile", function(value, element) {
var mobile = /^1[3|4|5|7|8]\d{9}$/;
return this.optional(element) || (mobile.test(value));
}, "手機格式不對");
//郵箱或手機驗證規則
jQuery.validator.addMethod("mm", function(value, element) {
var mm = /^[a-z0-9._%-][email protected]([a-z0-9-]+\.)+[a-z]{2,4}$|^1[3|4|5|7|8]\d{9}$/;
return this.optional(element) || (mm.test(value));
}, "格式不對");
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)");
注意:上面程式碼中--->配置錯誤提示的節點,預設為label,這裡配置成 span (errorElement:'span')
網上上找到的一些驗證規則,僅供參考!
// 郵政編碼驗證
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));
}, "只能輸入中文");