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