自定義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();//綁定命名空間
})();