ES6 Class数据验证类通过封装校验规则、错误收集和验证流程,实现可复用、易扩展的结构化验证:构造函数接收数据对象,addRule动态注册规则,validate返回{isValid, errors},支持同步/异步校验及常见类型方法。

用ES6 Class编写数据验证类,核心是把校验规则、错误收集和验证流程封装成可复用、易扩展的对象。重点不是堆砌语法,而是让类具备清晰的责任划分:定义规则、执行校验、返回结构化结果。
定义基础验证类结构
一个通用验证类应支持添加字段规则、执行批量校验、返回统一格式的错误信息。不需要继承,直接用class声明即可:
- 构造函数接收待验证的数据对象(如formValues)
- 内部维护一个errors对象,键为字段名,值为字符串数组(允许多条错误)
- 提供addRule(field, validator, message)方法动态注册规则
- 提供validate()触发全部校验并返回{ isValid: boolean, errors: {} }
支持常见校验类型的方法设计
validator参数建议接受函数,这样灵活度高。例如:
- required:检查值是否为非空(排除null、undefined、空字符串、空数组)
- minLength(3):闭包返回校验函数,检查字符串长度
- email:用正则判断格式
- custom(fn):传入任意返回布尔值的函数,如value => value > 0
每个校验函数只关注“是否通过”,错误消息由调用方指定,解耦逻辑与提示。
处理异步校验与组合规则
同步校验用validate()即可;若需异步(如用户名是否已存在),可增加validateAsync()方法,返回Promise:
- 内部用Promise.all并发执行所有异步规则
- 每个异步规则返回{ field, passed, message }对象,统一合并到errors
- 允许同步与异步规则共存,但需在文档中明确说明执行顺序(建议先同步后异步)
使用示例与错误输出规范
实例化后链式添加规则,调用验证:
const validator = new Validator(formData);
validator
.addRule('email', value => /\S+@\S+\.\S+/.test(value), '邮箱格式不正确')
.addRule('password', value => value.length >= 6, '密码至少6位')
.addRule('age', value => Number.isInteger(Number(value)), '年龄必须是整数');
const result = validator.validate();
// { isValid: false, errors: { email: ['邮箱格式不正确'], password: ['密码至少6位'] } }
错误结构扁平、字段明确,方便前端遍历渲染提示,也利于调试定位。


















