jQuery.validator

最近在做一個用戶註冊登錄的頁面,資料查尋過程中發現了一個非常不錯的客戶端驗證的極品-jQuery.validate。
它是著名的JavaScript包jQuery的一個插件,其實它還有其它的一些插件應該都爽,有待慢慢來學習

官方地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation/
jQuery用戶手冊:http://jquery.org.cn/visual/cn/index.xml

開發使用起來非常簡單明瞭,
我的代碼:

Java代碼 複製代碼
  1. $(document).ready(function(){    
  2.   
  3. /* 設置默認屬性 */    
  4. $.validator.setDefaults({    
  5.   submitHandler: function(form) { form.submit(); }    
  6. });    
  7. // 中文字兩個字節    
  8. jQuery.validator.addMethod("byteRangeLength", function(value, element, param) {    
  9.   var length = value.length;    
  10.   for(var i = 0; i < value.length; i++){    
  11.    if(value.charCodeAt(i) > 127){    
  12.     length++;    
  13.    }    
  14.   }    
  15.   return this.optional(element) || ( length >= param[0] && length <= param[1] );    
  16. }, "請確保輸入的值在3-15個字節之間(一箇中文字算2個字節)");    
  17.   
  18. /* 追加自定義驗證方法 */    
  19. // 身份證號碼驗證    
  20. jQuery.validator.addMethod("isIdCardNo", function(value, element) {    
  21.   return this.optional(element) || isIdCardNo(value);    
  22. }, "請正確輸入您的身份證號碼");    
  23.   
  24. // 字符驗證    
  25. jQuery.validator.addMethod("userName", function(value, element) {    
  26.   return this.optional(element) || /^[/u0391-/uFFE5/w]+$/.test(value);    
  27. }, "用戶名只能包括中文字、英文字母、數字和下劃線");    
  28.   
  29. // 手機號碼驗證    
  30. jQuery.validator.addMethod("isMobile", function(value, element) {    
  31.   var length = value.length;    
  32.   return this.optional(element) || (length == 11 && /^(((13[0-9]{1})|(15[0-9]{1}))+/d{8})$/.test(value));    
  33. }, "請正確填寫您的手機號碼");    
  34.   
  35. // 電話號碼驗證    
  36. jQuery.validator.addMethod("isPhone", function(value, element) {    
  37.   var tel = /^(/d{3,4}-?)?/d{7,9}$/g;    
  38.   return this.optional(element) || (tel.test(value));    
  39. }, "請正確填寫您的電話號碼");    
  40.   
  41. // 郵政編碼驗證    
  42. jQuery.validator.addMethod("isZipCode", function(value, element) {    
  43.   var tel = /^[0-9]{6}$/;    
  44.   return this.optional(element) || (tel.test(value));    
  45. }, "請正確填寫您的郵政編碼");    
  46. $(regFrom).validate({    
  47. /* 設置驗證規則 */    
  48.   rules: {    
  49.    userName: {    
  50.     required: true,    
  51.     userName: true,    
  52.     byteRangeLength: [3,15]    
  53.    },    
  54.    password: {    
  55.     required: true,    
  56.     minLength: 5    
  57.    },    
  58.    repassword: {    
  59.     required: true,    
  60.     minLength: 5,    
  61.     equalTo: "#password"    
  62.    },    
  63.    question: {    
  64.     required: true    
  65.    },    
  66.    answer: {    
  67.     required: true    
  68.    },    
  69.    realName: {    
  70.     required: true    
  71.    },    
  72.    cardNumber: {    
  73.     isIdCardNo: true    
  74.    },    
  75.    mobilePhone: {    
  76.     isMobile: true    
  77.    },    
  78.    phone: {    
  79.     isPhone: true    
  80.    },    
  81.    email: {    
  82.     required: true,    
  83.     email: true    
  84.    },    
  85.    zipCode: {    
  86.     isZipCode:true    
  87.    }    
  88.   },    
  89. /* 設置錯誤信息 */    
  90.   messages: {    
  91.    userName: {    
  92.     required: "請填寫用戶名",    
  93.     byteRangeLength: "用戶名必須在3-15個字符之間(一箇中文字算2個字符)"    
  94.    },    
  95.    password: {    
  96.     required: "請填寫密碼",    
  97.     minlength: jQuery.format("輸入{0}.")    
  98.    },    
  99.    repassword: {    
  100.     required: "請填寫確認密碼",    
  101.     equalTo: "兩次密碼輸入不相同"    
  102.    },    
  103.    question: {    
  104.     required: "請填寫您的密碼提示問題"    
  105.    },    
  106.    answer: {    
  107.     required: "請填寫您的密碼提示答案"    
  108.    },    
  109.    realName: {    
  110.     required: "請填寫您的真實姓名"    
  111.    },    
  112.    email: {    
  113.     required: "請輸入一個Email地址",    
  114.     email: "請輸入一個有效的Email地址"    
  115.    }    
  116.   },    
  117. /* 錯誤信息的顯示位置 */    
  118.   errorPlacement: function(error, element) {    
  119.    error.appendTo( element.parent() );    
  120.   },    
  121. /* 驗證通過時的處理 */    
  122.   success: function(label) {    
  123.    // set   as text for IE    
  124.    label.html(" ").addClass("checked");    
  125.   },    
  126. /* 獲得焦點時不驗證 */    
  127.   focusInvalid: false,    
  128.   onkeyup: false    
  129. });    
  130.   
  131. // 輸入框獲得焦點時,樣式設置    
  132. $('input').focus(function(){    
  133.   if($(this).is(":text") || $(this).is(":password"))    
  134.    $(this).addClass('focus');    
  135.   if ($(this).hasClass('have_tooltip')) {    
  136.    $(this).parent().parent().removeClass('field_normal').addClass('field_focus');    
  137.   }    
  138. });    
  139.   
  140. // 輸入框失去焦點時,樣式設置    
  141. $('input').blur(function() {    
  142.   $(this).removeClass('focus');    
  143.   if ($(this).hasClass('have_tooltip')) {    
  144.    $(this).parent().parent().removeClass('field_focus').addClass('field_normal');    
  145.   }    
  146. });    
  147. });   
$(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'); 
  } 
}); 
}); 


網上的資料有人說,它跟prototype包會有衝突,我還沒有同時使用過,這點不是很清楚,但我是發現一個問題:
對於最小/大長度的驗證方法,作者可能考慮到大家的命名習慣不同,同時做了minLength和minlength(maxLength和maxlength)方法,應該哪一個都是可以的,但對於用戶Message來說,只能夠定義針對minlength(maxlength),才能調用用戶自定義的Message,
否則只是調用包的默認Message,但具體原因還沒有查清楚。同時,這個插件提供了本地化的消息,但對於我這裏初學者來說,怎麼使用它還有待摸索!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章