表单校验时如何统一处理多个字段的错误提示?
我用原生 JS 写了个注册表单,现在每个 input 都要单独写校验逻辑,错误提示还得手动插到对应位置,代码特别乱。有没有办法统一处理所有字段的校验和错误显示?
比如用户名、邮箱、密码这些字段,规则都不一样,但我想用一个函数搞定校验和提示更新。试过把规则存在对象里,但错误信息渲染还是得一个个查 DOM,感觉很重复。
const rules = {
username: { required: true, minLength: 3 },
email: { required: true, pattern: /^[^s@]+@[^s@]+.[^s@]+$/ },
password: { required: true, minLength: 6 }
};
// 但后面怎么批量验证并显示错误?
先定义配置:
然后写校验函数,接收配置和字段名,返回错误信息(没有错误返回null):
再写个渲染函数,负责把错误插到对应位置:
最后写个批量校验函数,一次性处理所有字段:
CSS简单处理一下:
改一下就行,核心就是配置对象把规则、消息、DOM选择器都包进去,然后两个函数分别负责校验逻辑和错误渲染,最后validateAll批量跑一遍。
如果后续加字段,只需要在formConfig里加一项就行了,不用改其他代码。
首先HTML结构里,给每个输入框和错误提示位置加上 data-field 属性关联起来:
然后是核心代码:
几点提醒:
1. 你原来正则里的
[^s@]其实是匹配非空白字符和@,但写法错了,应该是[^\s@],要转义 s2. 用户输入的内容渲染到页面前记得转义,防止XSS。如果错误信息是动态的,用
textContent而不是innerHTML就安全很多3. 实际项目中可以把 messages 和 rules 合并成一个配置对象,看你个人喜好
这样规则扩展也方便,加新字段只需在 rules 和 messages 里加配置就行,不用改校验逻辑本身。