官方地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation/
jQuery用戶手冊:http://jquery.org.cn/visual/cn/index.xml
$(document).ready(function(){
/* 設置默認屬性 */
$.validator.setDefaults({
submitHandler: function(form) { form.submit(); }
});
// 中文字兩個字節
jQuery.validator.addMethod("byteRangeLength", function(value, element, param) {
var length = value.length;
for(var i = 0; i < value.length; i++){
if(value.charCodeAt(i) > 127){
length++;
}
}
return this.optional(element) || ( length >= param[0] && length <= param[1] );
}, "請確保輸入的值在3-15個字節之間(一箇中文字算2個字節)");
/* 追加自定義驗證方法 */
// 身份證號碼驗證
jQuery.validator.addMethod("isIdCardNo", function(value, element) {
return this.optional(element) || isIdCardNo(value);
}, "請正確輸入您的身份證號碼");
// 字符驗證
jQuery.validator.addMethod("userName", function(value, element) {
return this.optional(element) || /^[/u0391-/uFFE5/w]+$/.test(value);
}, "用戶名只能包括中文字、英文字母、數字和下劃線");
// 手機號碼驗證
jQuery.validator.addMethod("isMobile", function(value, element) {
var length = value.length;
return this.optional(element) || (length == 11 && /^(((13[0-9]{1})|(15[0-9]{1}))+/d{8})$/.test(value));
}, "請正確填寫您的手機號碼");
// 電話號碼驗證
jQuery.validator.addMethod("isPhone", function(value, element) {
var tel = /^(/d{3,4}-?)?/d{7,9}$/g;
return this.optional(element) || (tel.test(value));
}, "請正確填寫您的電話號碼");
// 郵政編碼驗證
jQuery.validator.addMethod("isZipCode", function(value, element) {
var tel = /^[0-9]{6}$/;
return this.optional(element) || (tel.test(value));
}, "請正確填寫您的郵政編碼");
$(regFrom).validate({
/* 設置驗證規則 */
rules: {
userName: {
required: true,
userName: true,
byteRangeLength: [3,15]
},
password: {
required: true,
minLength: 5
},
repassword: {
required: true,
minLength: 5,
equalTo: "#password"
},
question: {
required: true
},
answer: {
required: true
},
realName: {
required: true
},
cardNumber: {
isIdCardNo: true
},
mobilePhone: {
isMobile: true
},
phone: {
isPhone: true
},
email: {
required: true,
email: true
},
zipCode: {
isZipCode:true
}
},
/* 設置錯誤信息 */
messages: {
userName: {
required: "請填寫用戶名",
byteRangeLength: "用戶名必須在3-15個字符之間(一箇中文字算2個字符)"
},
password: {
required: "請填寫密碼",
minlength: jQuery.format("輸入{0}.")
},
repassword: {
required: "請填寫確認密碼",
equalTo: "兩次密碼輸入不相同"
},
question: {
required: "請填寫您的密碼提示問題"
},
answer: {
required: "請填寫您的密碼提示答案"
},
realName: {
required: "請填寫您的真實姓名"
},
email: {
required: "請輸入一個Email地址",
email: "請輸入一個有效的Email地址"
}
},
/* 錯誤信息的顯示位置 */
errorPlacement: function(error, element) {
error.appendTo( element.parent() );
},
/* 驗證通過時的處理 */
success: function(label) {
// set as text for IE
label.html(" ").addClass("checked");
},
/* 獲得焦點時不驗證 */
focusInvalid: false,
onkeyup: false
});
// 輸入框獲得焦點時,樣式設置
$('input').focus(function(){
if($(this).is(":text") || $(this).is(":password"))
$(this).addClass('focus');
if ($(this).hasClass('have_tooltip')) {
$(this).parent().parent().removeClass('field_normal').addClass('field_focus');
}
});
// 輸入框失去焦點時,樣式設置
$('input').blur(function() {
$(this).removeClass('focus');
if ($(this).hasClass('have_tooltip')) {
$(this).parent().parent().removeClass('field_focus').addClass('field_normal');
}
});
});
身份驗證方法
首先在jquery.validate.js找到
equalTo : function(value, element, param) {
return value == $(param).val();
},
在下面添加如下代碼
idcard : function(sId, element) {
var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"內蒙古",21:"遼寧",22:"吉林",23:"黑龍江",31:"上海",32:"江蘇",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",41:"河南",42:"湖北",43:"湖南",44:"廣東",45:"廣西",46:"海南",50:"重慶",51:"四川",52:"貴州",53:"雲南",54:"西藏",61:"陝西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外"};
var iSum=0 ;
var info="" ;
if(sId=="") return true;
if(!/^/d{17}(/d|x)$/i.test(sId)) return false;
sId=sId.replace(/x$/i,"a");
if(aCity[parseInt(sId.substr(0,2))]==null) return false;
sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
var d=new Date(sBirthday.replace(/-/g,"/")) ;
if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return false;
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11) ;
if(iSum%11!=1) return false;
return true;
}
使用方法如下
$(document).ready(function(){
$("#no").focus();
$("#inputHouse").validate({
rules: {
idcard:{
required:true,
idcard:true
}
},
messages: {
idcard: {
idcard: "身份證號非法"
}
}
});
});
validate自帶的默認驗證
required: "必選字段",
remote: "請修正該字段",
email: "請輸入正確格式的電子郵件",
url: "請輸入合法的網址",
date: "請輸入合法的日期",
dateISO: "請輸入合法的日期 (ISO).",
number: "請輸入合法的數字",
digits: "只能輸入整數",
creditcard: "請輸入合法的信用卡號",
equalTo: "請再次輸入相同的值",
accept: "請輸入擁有合法後綴名的字符串",
maxlength: jQuery.format("請輸入一個長度最多是 {0} 的字符串"),
minlength: jQuery.format("請輸入一個長度最少是 {0} 的字符串"),
rangelength: jQuery.format("請輸入一個長度介於 {0} 和 {1} 之間的字符串"),
range: jQuery.format("請輸入一個介於 {0} 和 {1} 之間的值"),
max: jQuery.format("請輸入一個最大爲 {0} 的值"),
min: jQuery.format("請輸入一個最小爲 {0} 的值")
validate ()的可選項
debug:進行調試模式
$(".selector").validate({ debug: true})
把調試設置爲默認
$.validator.setDefaults({ debug: true})
submitHandler:用其他方式替代默認的SUBMIT,比如用AJAX的方式提交
$(".selector").validate({ submitHandler: function(form) { $(form).ajaxSubmit(); }})
ignore:忽略某些元素不驗證
$("#myform").validate({ ignore: ".ignore"})
rules: 默認下根據form的classes, attributes, metadata判斷,但也可以在validate函數裏面聲明
Key/value 可自定義規則. Key是對象的名字 value是對象的規則,可以組合使用 class/attribute/metadata rules.
以下代碼特別驗證selector類中name='name'是必填項並且 email是既是必填又要符合email的格式
$(".selector").validate({ rules: { // simple rule, converted to {required:true} name: "required",
// compound rule email: { required: true, email: true } }})messages:更改默認的提示信息
$(".selector").validate({ rules: { name: "required", email: { required: true, email: true } }, messages: { name: "Please specify your name", email: { required: "We need your email address to contact you", email: "Your email address must be in the format of [email protected]" } }})
groups:定義一個組,把幾個地方的出錯信息統一放在一個地方,用errorPlacement控制把出錯信息放在哪裏
$("#myform").validate({ groups: { username: "fname lname" }, errorPlacement: function(error, element) { if (element.attr("name") == "fname" || element.attr("name") == "lname" ) error.insertAfter("#lastname"); else error.insertAfter(element); }, debug:true })