//校验项
var validator = [
{key:'personList',validator:"length(1)",msg:'补贴收款人不能为空'},
{key:'urbn',validator:"notblank",msg:'补贴城市不能为空'},
{key:'dys',validator:"notblank",msg:'补贴天数必须大于0'},
{key:'amt',validator:"notblank|number|range(0)",msg:'价税合计必须大于0'},
{key:'rmbrsAmt',validator:"notblank|number|range(0)",msg:'补贴金额必须大于0'},
{key:'vchrPgs',validator:"notblank|integer|range(-1)",msg:'票据张数必须大于等于0'}
];
//需要校验的数据
var formData = {
personList:[],
urbn:'',
dys:0,
amt:null,
rmbrsAmt:null,
vchrPgs:0,
}
//校验方案实现细节
var Validator = (function() {
function blank(v) {
if(typeof v == "undefined") {
return true;
}
if(typeof v == "string" && v.trim()=="") {
return true;
}
return false;
}
return {
/**
* 校验器定义
*/
valiators: {
'notblank':function(v) {
if(blank(v)) {
return false;
}
return true;
},
'number':function(v) {
if(blank(v)) {
return true;
}
return /^\d+(\.)*\d*$/.test(""+v);
},
'integer':function(v) {
if(blank(v)) {
return true;
}
return /^\d+$/.test(""+v);
},
'length':function(v,min,max) {
if(typeof v =="undefined") {
return false;
}
if(min) {
var k = parseInt(min);
if(k>0 && (""+v).length<k) {
return false;
}
}
if(max) {
var j = parseInt(max);
if(j>0 && (""+v).length>j) {
return false;
}
}
return true;
},
'size':function(v,min,max) {
if(typeof v =="undefined") {
return false;
}
if(min) {
var k = parseInt(min);
if(k>0 && v.length<k) {
return false;
}
}
if(max) {
var j = parseInt(max);
if(j>0 && v.length>j) {
return false;
}
}
return true;
},
// 不包含 min max
'range':function(v,min,max) {
if(blank(v)) {
return false;
}
var value = parseFloat(v);
if(min) {
if(value<=min) {
return false;
}
}
if(max) {
if(value>=max) {
return false;
}
}
return true;
}
},
/**
* var conf = [{key:'name',validator:"number|string",msg:'名称不能为空'}];
* @param {Object} conf
* @param {Object} obj
*/
check :function(conf,obj) {
var _this = this;
var result = [];
if(!conf) {//没有校验项
return [];
}
conf.forEach(function(item) {
if(!item.key||!item.validator) {
return; //校验项数据不完整,无法进行校验
}
var value =eval('obj.'+item.key);//取出数据 key -> value
var vts = item.validator.split('|');//需要校验几部分
vts.forEach(function(vt) {
if(!_this.checkVal(value,vt)) {//进行校验
result.push(item.msg);//收集错误信息
}
})
});
return result;
},
checkVal:function (value,validator) {
var i = validator.indexOf('(');
var j = validator.indexOf(')');
var name = validator.substr(0,i==-1?validator.length:i);
var args = validator.substr(i+1,j-i-1).split(',');
args.unshift(value);
return this.valiators[name].apply(this.valiators[name],args);
}
};
})();
//进行校验,返回校验结果
var errs = Validator.check(validator,formData);
if(errs.length>0) {
alert('数据校验不通过:'+errs.join());
}
代码的执行结果如图所示: