js数据校验器,可用于Ajax请求前的统一数据校验

//校验项
        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());
        }

代码的执行结果如图所示:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值