jquery.validate使用攻略

主要分幾部分
jquery.validate 基本用法
jquery.validate API說明
jquery.validate 自定義
jquery.validate 常見類型的驗證代碼

下載地址

jquery.validate插件的文檔地址
http://docs.jquery.com/Plugins/Validation

jquery.validate插件的主頁
http://bassistance.de/jquery-plugins/jquery-plugin-validation/

jquery.validate插件主頁上提供的demo
http://jquery.bassistance.de/validate/demo/

驗證規則 javascript

下面是默認校驗規則,也能夠自定義規則

(1)required:true 必輸字段
(2)remote:"check.php" 使用ajax方法調用check.php驗證輸入值
(3)email:true 必須輸入正確格式的電子郵件
(4)url:true 必須輸入正確格式的網址
(5)date:true 必須輸入正確格式的日期
(6)dateISO:true 必須輸入正確格式的日期(ISO),例如:2009-06-23,1998/01/22 只驗證格式,不驗證有效性
(7)number:true 必須輸入合法的數字(負數,小數)
(8)digits:true 必須輸入整數
(9)creditcard: 必須輸入合法的信用卡號
(10)equalTo:"#field" 輸入值必須和#field相同
(11)accept: 輸入擁有合法後綴名的字符串(上傳文件的後綴)
(12)maxlength:5 輸入長度最可能是5的字符串(漢字算一個字符)
(13)minlength:10 輸入長度最小是10的字符串(漢字算一個字符)
(14)rangelength:[5,10] 輸入長度必須介於 5 和 10 之間的字符串")(漢字算一個字符)
(15)range:[5,10] 輸入值必須介於 5 和 10 之間
(16)max:5 輸入值不能大於5
(17)min:10 輸入值不能小於10 驗證提示 下面是默認的驗證提示,官網有簡體中文版的驗證提示下載,或者經過jQuery.extend(jQuery.validator.messages自定義錯誤提示信息,能夠將網站的驗證提示文本統一到一個文件裏。

required: "This field is required.",
remote: "Please fix this field.",
email: "Please enter a valid email address.",
url: "Please enter a valid URL.",
date: "Please enter a valid date.",
dateISO: "Please enter a valid date (ISO).",
number: "Please enter a valid number.",
digits: "Please enter only digits",
creditcard: "Please enter a valid credit card number.",
equalTo: "Please enter the same value again.",
accept: "Please enter a value with a valid extension.",
maxlength: $.validator.format("Please enter no more than {0} characters."),
minlength: $.validator.format("Please enter at least {0} characters."),
rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
range: $.validator.format("Please enter a value between {0} and {1}."),
max: $.validator.format("Please enter a value less than or equal to {0}."),
min: $.validator.format("Please enter a value greater than or equal to {0}.") 使用方式 1:
在控件中使用默認驗證規則,例子:
電子郵件(必填)
<input id="email" class="required email" value="email@" />
2:
能夠在控件中自定義驗證規則,例子:
自定義(必填,[3,5])
<input id="complex" value="hi" class="{required:true,minlength:3, maxlength:5,
messages:{required:'爲何不輸入一點文字呢',minlength:'輸入的太少了',maxlength:'輸入那麼多幹嗎'}}" />

3:

經過javascript自定義驗證規則,下面的JS自定義了兩個規則,password和confirm_password
$().ready(function() {
    $("#form2").validate({
        rules: {
            password: {
                required: true,
                minlength: 5
            },
            confirm_password: {
                required: true,
                minlength: 5,
                equalTo: "#password"
            }
        },
        messages: {
            password: {
                required: "沒有填寫密碼",
                minlength: jQuery.format("密碼不能小於{0}個字符")
            },
            confirm_password: {
                required: "沒有確認密碼",
                minlength: "確認密碼不能小於{0}個字符",
                equalTo: "兩次輸入密碼不一致嘛"
            }
        }
    });
});
    
required除了設置爲true/false以外,還可使用表達式或者函數,好比
$("#form2").validate({
	rules: {
		funcvalidate: {
			required: function() {return $("#password").val()!=""; }
		}
	},
	messages: {
		funcvalidate: {
			required: "有密碼的狀況下必填"
		}
	}
});
 
Html
密碼<input id="password" name="password" type="password" />
確認密碼<input id="confirm_password" name="confirm_password" type="password" />
條件驗證<input id="funcvalidate" name="funcvalidate" value="" />

4:

使用meta自定義驗證信息

首先用JS設置meta
$("#form3").validate({ meta: "validate" });            

Html

email<input class="{validate:{required:true, email:true, 
messages:{required:'輸入email地址', email:'你輸入的不是有效的郵件地址'}}}"/>

5:

使用meta能夠將驗證規則寫在自定義的標籤內,好比validate

JS設置meta
$().ready(function() {
    $.metadata.setType("attr", "validate");
    $("#form1").validate();
});

Html

Email
<input id="email" name="email" 
validate="{required:true, email:true, messages:{required:'輸入email地址', email:'你輸入的不是有效的郵件地址'}}" />

6:
自定義驗證規則

對於複雜的驗證,能夠經過jQuery.validator.addMethod添加自定義的驗證規則

官網提供的additional-methods.js裏包含一些經常使用的驗證方式,好比lettersonly,ziprange,nowhitespace等

例子
// 字符驗證   
jQuery.validator.addMethod("userName", function(value, element) {
    return this.optional(element) || /^[\u0391-\uFFE5\w]+$/.test(value);
}, "用戶名只能包括中文字、英文字母、數字和下劃線");   

//而後就可使用這個規則了
$("#form1").validate({
    // 驗證規則
    rules: {
        userName: {
            required: true,
            userName: true,
            rangelength: [5,10]
        }
    },
    /* 設置錯誤信息 */
    messages: {
        userName: {
            required: "請填寫用戶名",
            rangelength: "用戶名必須在5-10個字符之間" 
        }                
    },
});  

7:
radio、checkbox、select的驗證方式相似

radio的驗證
            
性別
<span>
	男<input type="radio" id="gender_male" value="m" name="gender" class="{required:true}"/><br />
	女<input type="radio" id="gender_female" value="f" name="gender" />
</span>
            
checkbox的驗證

最少選擇兩項
<span>
	選項1<input type="checkbox" id="check_1" value="1" name="checkGroup" 
	class="{required:true,minlength:2, messages:{required:'必須選擇',minlength:'至少選擇2項'}}" /><br />
	選項2<input type="checkbox" id="check_2" value="2" name="checkGroup" /><br />
	選項3<input type="checkbox" id="check_3" value="3" name="checkGroup" /><br />
</span>

select的驗證

下拉框
<span>
    <select id="selectbox" name="selectbox" class="{required:true}">
        <option value=""></option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>
</span>
8:

Ajax驗證

用remote能夠進行Ajax驗證
remote: {
url: "url",      //url地址
type: "post",           //發送方式
dataType: "json",       //數據格式     data: {                 //要傳遞的數據
	username: function() {
		return $("#username").val();
	}}
} Plugin methods 
Name	Type

validate( options )	Returns: Validator
驗證所選的FORM

valid( )	Returns: Boolean
檢查是否驗證經過

rules( )	Returns: Options
返回元素的驗證規則

rules( "add", rules )	Returns: Options
增長驗證規則

rules( "remove", rules )	Returns: Options
刪除驗證規則

removeAttrs( attributes )	Returns: Options
刪除特殊屬性而且返回他們 Custom selectors Name	Type

:blank	Returns: Array <Element >
沒有值的篩選器

:filled	Returns: Array <Element >
有值的篩選器

:unchecked	Returns: Array <Element >
沒選擇的元素的篩選器 Utilities Name	Type

jQuery.format( template, argument , argumentN... )	Returns: String
用參數代替模板中的 {n}。 Validator
validate方法返回一個Validator對象, 它有不少方法, 讓你能使用引起校驗程序或者改變form的內容. 

下面只是列出經常使用的.

form( )	Returns: Boolean
驗證form返回成功仍是失敗

element( element )	Returns: Boolean
驗證單個元素是成功仍是失敗

resetForm( )	Returns: undefined
把前面驗證的FORM恢復到驗證前原來的狀態

showErrors( errors )	Returns: undefined
顯示特定的錯誤信息 built-in Validation methods Name	Type

setDefaults( defaults )	Returns: undefined
改變默認的設置

addMethod( name, method, message )	Returns: undefined
添加一個新的驗證方法. 必須包括名字,一個JAVASCRIPT方法和一個默認的信息

addClassRules( name, rules )	Returns: undefined
增長組合驗證類型 

addClassRules( rules )	Returns: undefined
增長組合驗證類型 built-in Validation methods
Name	Type

required( )	Returns: Boolean
必填驗證元素

required( dependency-expression )	Returns: Boolean
必填元素依賴於表達式的結果.

required( dependency-callback )	Returns: Boolean
必填元素依賴於回調函數的結果.

remote( url )	Returns: Boolean
請求遠程校驗。url一般是一個遠程調用方法

minlength( length )	Returns: Boolean
設置最小長度

maxlength( length )	Returns: Boolean
設置最大長度

rangelength( range )	Returns: Boolean
設置一個長度範圍[min,max]

min( value )	Returns: Boolean
設置最小值.

max( value )	Returns: Boolean
設置最大值.

range( range )	Returns: Boolean
設置值的範圍

email( )	Returns: Boolean
驗證電子郵箱格式

url( )	Returns: Boolean
驗證鏈接格式

date( )	Returns: Boolean
驗證日期格式(相似30/30/2008的格式,不驗證日期準確性只驗證格式)

dateISO( )	Returns: Boolean
研製ISO類型的日期格式

dateDE( )	Returns: Boolean
驗證德式的日期格式(29.04.1994 or 1.1.2006)

number( )	Returns: Boolean
驗證十進制數字(包括小數的)

numberDE( )	Returns: Boolean
Makes the element require a decimal number with german format.

digits( )	Returns: Boolean
驗證整數

creditcard( )	Returns: Boolean
驗證信用卡號

accept( extension )	Returns: Boolean
驗證相同後綴名的字符串

equalTo( other )	Returns: Boolean
驗證兩個輸入框的內容是否相同
自定義jquery-validate的驗證行爲

1: 自定義表單提交

設置submitHandler來自定義表單提交動做

$(".selector").validate({
    submitHandler: function(form) { alert("驗證經過"); }
});

若是須要提交表單,能夠調用
form.submit(); 或者$(form).ajaxSubmit();

2: 調試模式

將debug設置爲true,表單不會提交,只進行檢查,方便調試

$(".selector").validate({
   debug: true
})

3: 設置validate的默認值

使用setDefaults能夠設置validate的默認值,好比默認全部表單驗證都是在debug模式下進行

$.validator.setDefaults({
    debug: true
})

4: 某些元素不驗證

設置ignore屬性能夠忽略某些元素不驗證

$(".selector").validate({
   ignore: "ignore"
})

5: 驗證時機

jquery.validate能夠很方便的設置在何時觸發驗證動做

onsubmit: 提交時是否驗證

$(".selector").validate({
   onsubmit: false
})

onfocusout: 失去焦點時驗證(checkboxes/radio除外)

$(".selector").validate({
   onfocusout: false
})

onkeyup: 在keyup時驗證

$(".selector").validate({
   onkeyup: false
})

onclick: 在checkboxes、radio點擊時驗證.

$(".selector").validate({
   onclick: false
})

6: 重寫驗證規則和驗證提示信息

//重寫max的的驗證提示信息
$.validator.messages.max = jQuery.format("Your totals musn't exceed {0}!");

//重寫equal方法
$.validator.methods.equal = function(value, element, param) {
	return value == param;
};

7: focusInvalid 是否把焦點聚焦在最後一個動做或者最近的一次出錯上

$(".selector").validate({
   focusInvalid: false
})

8: focusCleanup

若是該屬性設置爲True, 那麼控件得到焦點時,移除出錯的class定義,隱藏錯誤信息,避免和 focusInvalid.一塊兒用。

$(".selector").validate({
   focusCleanup: true
})

9: meta

設置meta來封裝驗證規則

$(".selector").validate({
   meta: "validate",
})
<script type="text/javascript"></script>
自定義錯誤消息的顯示方式

默認狀況下,驗證提示信息用label元素來顯示, 而且會添加css class, 經過css能夠很方便設置出錯控件以及錯誤信息的顯示方式。

/* 輸入控件驗證出錯*/
form  input.error { border:solid 1px red;}

/* 驗證錯誤提示信息*/
form label.error{width: 200px;margin-left: 10px; color: Red;}

若是想自定義顯示方式,能夠修改jquery.validate的默認顯示方式

默認用label顯示錯誤消息,能夠經過errorElement屬性來修改
errorElement: 錯誤消息的html標籤

$(".selector").validate
   errorElement: "em"
})

能夠在出錯信息外用其餘的元素包裝一層。
wrapper: 錯誤消息的外層封裝html標籤

$(".selector").validate({
   wrapper: "li"
})

驗證出錯的css class默認是error,經過errorClass能夠修改
errorClass: 驗證出錯時使用的css class

$(".selector").validate({
   errorClass: "invalid"
})

還自定義驗證成功時的動做
success: 若是值是字符串,會當作一個css類,若是是一個函數,則執行該函數

$(".selector").validate({
	success: "valid"
})

或者

success: function(label) {
	label.html(" ").addClass("checked");
}

還能夠把錯誤消息統一到一個容器顯示
errorLabelContainer: 將錯誤消息統一到一個容器顯示

$("#myform").validate({
   errorLabelContainer: "#messageBox"
})

默認狀況下,錯誤消息是放在驗證元素後面的,能夠自定義錯誤消息的顯示位置

$(".selector").validate({
  errorPlacement: function(error, element) {
     error.appendTo( element.parent("td").next("td") );
   }
})

更進一步能夠定義一個組,把幾個地方的出錯信息統一放在一個地方,用error Placement控制把出錯信息放在哪裏
groups:定義一個組

$(".selector").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);
   }
 })

高亮顯示
highlight: 高亮顯示,默認是添加errorClass
unhighlight: 和highlight對應,反高亮顯示

$(".selector").validate({
  highlight: function(element, errorClass) {
     $(element).addClass(errorClass);
     $(element.form).find("label[for=" + element.id + "]").addClass(errorClass);
  },
  unhighlight: function(element, errorClass) {
     $(element).removeClass(errorClass);
     $(element.form).find("label[for=" + element.id + "]").removeClass(errorClass);
  }
});

 
或者能夠徹底自定義錯誤顯示
showErrors: 獲得錯誤的顯示句柄

$(".selector").validate({
   showErrors: function(errorMap, errorList) {
	$("#summary").html("Your form contains " + this.numberOfInvalids() 
		+ " errors, see details below.");
	this.defaultShowErrors();
   }
})
<script type="text/javascript"></script> // 手機號碼驗證 jQuery.validator.addMethod("mobile", function(value, element) {     var length = value.length;     var mobile =  /^(((13[0-9]{1})|(15[0-9]{1}))+\d{8})$/     return this.optional(element) || (length == 11 && mobile.test(value)); }, "手機號碼格式錯誤");   // 電話號碼驗證   jQuery.validator.addMethod("phone", function(value, element) {     var tel = /^(0[0-9]{2,3}\-)?([2-9][0-9]{6,7})+(\-[0-9]{1,4})?$/;     return this.optional(element) || (tel.test(value)); }, "電話號碼格式錯誤"); // 郵政編碼驗證   jQuery.validator.addMethod("zipCode", function(value, element) {     var tel = /^[0-9]{6}$/;     return this.optional(element) || (tel.test(value)); }, "郵政編碼格式錯誤"); // QQ號碼驗證   jQuery.validator.addMethod("qq", function(value, element) {     var tel = /^[1-9]\d{4,9}$/;     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)); }, "只能輸入中文"); // 下拉框驗證 $.validator.addMethod("selectNone", function(value, element) {     return value == "請選擇"; }, "必須選擇一項"); // 字節長度驗證 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]); }, $.validator.format("請確保輸入的值在{0}-{1}個字節之間(一箇中文字算2個字節)"));
相關文章
相關標籤/搜索