var policy = { // 必填校验 isEmpty: ({ val }) => !!val, // 最大长度校验 maxLength: ({ maxLen, val }) => val.length < maxLen, //纯数字校验 isNumber: ({ val }) =>/^[0-9]*$/.test(val), }
functionvarifyForm(formData, formRule) { // 循环表单对象 for(let x in formData) { // 字段有定义规则才进行验证 if (formRule[ x ]) { const tmpVal = formData[ x ]; // 循环验证规则 for(let rule of formRule[ x ]) { // 有定义的策略才验证 if (policy[ rule.type ]) { const param = {...Object.assign(rule.param || {}, { val: tmpVal })} const isAccept = policy[ rule.type ](param) if (!isAccept) return { accept: false, msg: rule.errMsg || `${ x } varify fail`, } } } } } return { accept: true, msg: '', } }
// 定义测试用例 var form1 = { a: null, } var form2 = { a: 213213123, } var form3 = { a: 'd212', } var rules = { a: [ { type: 'isEmpty', errMsg: 'a is Empty' }, { type: 'maxLength', errMsg: 'a is too long', param: { maxLen: 5 }, }, { type: 'isNumber', errMsg: 'a is not a number', }, ] }
console.log(varifyForm(form1, rules)); // a is Empty console.log(varifyForm(form2, rules)); // a is too long console.log(varifyForm(form3, rules)); // a is not a number