javascript數據驗證組件

自定義javascript數據驗證組件,待更新

轉載請註明出處


/************************************************
 *	數據驗證組件	
 * 	用於表單上傳或數據上傳時驗證
 * 	數據驗證規則函數可自行添加
 * 	lz暫時只用着一些
 * 	此方式參考CI框架中表單驗證方式
 *  github地址:https://github.com/lzuntalented/lzVerify
 * 
 * 	@author lz											
 * 	@time 20160317	
 ************************************************* 
 *  使用實例
 * 		var phone = '12345678901';
 * 		var password = 'a123456';
 * 		var data = {
 * 			'phone' : lzVerify.setRule(phone,'手機號格式不正確','only_number|str_length[11]'),
 * 			'password' : lzVerify.setRule(password,'密碼格式不正確','only_number|str_length[8-20]')
 * 		} 
 * 
 * 		var msg = lzVerify.getErrorMsg(true);
 * 		if(!msg){
 *			alert(msg);//數據驗證不通過
 *		}
 *		
 *		數據驗證通過
 ************************************************ 
 */
;(function(){
	/*數據驗證*/
	function lzVerify(){
		this.version = '1.0.0';
	}
	
	lzVerify.prototype.errorMsg = false;//出錯提示
	
	/*獲取驗證出錯提示
	 * @param tag 設置此值以便立即清理驗證規則
	 */
	lzVerify.prototype.getErrorMsg = function (tag){
		var msg = this.errorMsg;
		tag && this.clearRule();
		return msg;
	}
	
	/*清理驗證規則*/
	lzVerify.prototype.clearRule = function (){
		this.errorMsg = false;
	}
	
	//===========================驗證規則函數begin=============================
	/*
	 * 正整數驗證規則
	 * @param value 待驗證的值
	 * */
	lzVerify.prototype.only_number = function (value){
		var ret = /^[1-9]\d*$/.test(value);
		return ret;
	}
	
	/*
	 * 字符長度驗證規則
	 * @param value 待驗證的值
	 * @param param 待驗證的值的長度格式 
	 * 				[1] 字符長度等於1
	 * 				[1-9] 字符長度大於1 小於9
	 * 				[1-] 字符長度大於1
	 * 				[-9] 字符長度小於9
	 */
	lzVerify.prototype.str_length = function (value,param){
		var list = param.split("-");
		if(list.length == 1){
			return value.length == list[0];
		}else{
			if(list[0] == ""){
				return value.length < list[1];
			}else if(list[1] == ""){
				return value.length > list[0]
			}
				
			return value.length > list[0] && value.length < list[1];
		}
	}
	//===========================驗證規則函數end=============================
	
	/*
	 * 設置驗證的規則
	 * @param value 待驗證的值
	 * @param errorMsg 出錯提示
	 * @param ruleName 驗證規則名
	 * 					string類型 使用自帶的函數名
	 * 					function類型 使用自定義函數,並且返回值爲真時才表示驗證通過 =>>> 函數原型function(data) data爲待驗證值
	 * */
	lzVerify.prototype.setRule = function (value,errorMsg,ruleName){
		if(this.errorMsg) return ;//在一組驗證規則下,出錯一次就不進行驗證
		
		if(typeof ruleName === "function"){//若規則名爲函數,則執行指定函數,該函數必須返回處理結果的正確與否
			var result = ruleName(value);
			if(!result) this.errorMsg = errorMsg;//自定義驗證規則不通過,直接返回
			return;
		}
		
		var rules = ruleName.split("|");//規則名以|分隔
		for(var i in rules){
			var func_name = rules[i];//規則方法名
			var param = rules[i].split('[');//規則參數使用[]包圍
			
			if(param.length == 2){
				func_name = param[0];
				param = param[1].substr(0,param[1].length - 1);
			}
			
			var str = 'this.' + func_name + '("' + value + '","' + param +'")';//拼接待指定的驗證字符串
			var ret = eval(str);//動態執行驗證規則
			
			if(!ret) {//有一個規則錯誤,則退出驗證
				this.errorMsg = errorMsg;
				return;
			}
		}
		
		return value;//規則正確,返回驗證值
	}
	
	window.lzVerify = window.lzVerify || new lzVerify();//綁定命名空間
})();



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