代码备份

代码并不完整

校验功能代码:



const async = require('async');


const validatorsHelpers = {
    required(defData) {
        defData = defData || {};
        function returnFunc(data, cb) {

            if (data.fieldValue) {
                cb(null, data);
                return;
            }
            cb(defData.msg || data.fieldName + " field is required", data);
        }
        return returnFunc;
    },
    regex(defData) {
        defData = defData || {};
        function returnFunc(data, cb) {

            if (defData.regex.test(data.fieldValue)) {
                cb(null, data);
                return;
            }
            cb(defData.msg || data.fieldName + " field is invalid", data);
        }
        return returnFunc;
    },
    phone(defData) {
        defData = defData || {};
        defData.regex = /(^(13\d|14[57]|15[^4,\D]|17[678]|18\d)\d{8}|170[059]\d{7})$/;
        defData.msg = defData.msg || "请输入有效的手机号";
        return validatorsHelpers.regex(defData);
    }
};

function validateRun(validators, data) {
    var tasks = [];

    function wapper(validator) {
        return function(done) {
            validator(data, done);
        }
    }

    for (var task of validators) {
        tasks.push(wapper(task));
    }

    return function(cb) {
        async.series(tasks, function(err) {
            data['error'] = err;
            cb(null, data);
        });
    }
}

function validate(data, fields, cb) {
    var tasks = [];
    for (var fieldName of Object.keys(fields)) {
        var validatorsObj = fields[fieldName];
        var fieldValue = data[fieldName];
        var validators = [];

        if (validatorsObj !== null && Object.prototype.toString.call(validatorsObj) !== '[object Array]') {
            validators = [validatorsObj];
        } else {
            validators = validatorsObj;
        }
        if (!validators) {
            validators = [];
        }

        tasks.push(validateRun(validators, {'fieldName': fieldName, 'fieldValue': fieldValue}))
    }
    async.parallel(tasks, function (err, results) {
        var errors = {}, rData = {};
        for (var rs of results) {
            if (rs.error) {
                errors[rs.fieldName] = rs.error;
            } else {
                rData[rs.fieldName] = rs.fieldValue;
            }
        }
        cb(errors, rData);
    });
}

const Mixin = {

    validateAll(cb) {
        var data = this.state.data, fields = this.state.fileds;
        validate(data, fields, (errors, rData) => {
            this.setState({
                errors: errors
            });
            cb && cb(Object.keys(errors).length == 0, rData);
        });
    },
    validateOne(name, cb) {
        var data = this.state.data, fields = this.state.fields, allerrors = this.state.errors;
        var d = {}, f = {};
        d[name] = data[name];
        f[name] = fields[name];
        validate(d, f, (errors, rData) => {
            allerrors[name] = errors[name];
            console.info(errors, allerrors);
            this.setState({
                errors: allerrors
            });
            cb && cb(Object.keys(errors).length == 0, rData);
        });
    },
    handleChangeValidate(event) {
        var name = event.target.name;
        this.state.data[name] = event.target.value;
        this.setState({
            data: this.state.data
        });
        this.validateOne(name);
    }
};

module.exports = exports = {
    validate: validate,
    helper: validatorsHelpers,
    Mixin: Mixin
};

调用样例:(代码不全)

const Validateor = require('./common/validator');


const SomeForm = React.createClass({
    mixins: [Validateor.Mixin],

    getInitialState: function() {
        return {
            errors: {},
            data: {
                phone: ''
            },
            fields: {
                phone: [
                    Validateor.helper.required({errorMsg: "请输入手机"}),
                    Validateor.helper.phone(),
                    phoneExist // 其他自定义校验
                ]
            },
            phoneLoading: false
        };
    },

    onSubmit: function(e) {
        console.info("开始校验。。。。");
        this.validateAll().then(function() {
            console.info("校验结束。。。。");
            this.sendForm();
        }.bind(this));
    },

    render: function() {
        return (
            <div className="container">
                <form className="form-signin">

                    <PhoneInput
                        onChange={this.handleChangeValidate}
                        value={this.state.data.phone}
                        error={this.state.errors.phone}
                        />
                        onClick={this.onSubmit}>提交</Button>
                </form>

            </div>
        );
    }
});

转载于:https://my.oschina.net/ruben/blog/523474

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值