如何使用Joi为校验规则(含正则)添加自定义错误提示?
Joi 正则校验自定义错误提示正确配置方案
你之前的配置不生效有两个核心原因:
- 错误码匹配错误:
object.regex是object类型字段的正则校验错误码,你当前校验的是string类型字段,正则匹配失败对应的错误码为string.pattern.base - 键名存在多余空格:你写的
"object. regex"中间多了空格,即使错误码正确也无法匹配到对应的提示
正确配置示例
Project: Joi.string() .min(3) .regex(/^\S+$/) .max(25) .required() .messages({ // 正则校验不通过的提示 "string.pattern.base": "项目名称不允许包含空格", // 也可以同步配置其他规则的自定义提示 "string.min": "项目名称长度不能少于3个字符", "string.max": "项目名称长度不能超过25个字符", "any.required": "项目名称为必填项" })
多正则区分提示的场景
如果同一个字段有多个正则校验规则,可以给每个规则单独命名,分别配置提示:
Project: Joi.string() // 第二个参数为当前正则规则的自定义名称 .regex(/^\S+$/, 'noWhiteSpace') .regex(/^[a-zA-Z0-9_\u4e00-\u9fa5]+$/, 'validChar') .messages({ "string.pattern.noWhiteSpace": "项目名称不允许包含空格", "string.pattern.validChar": "项目名称仅支持中文、英文、数字和下划线" })
通用排错技巧
如果不确定对应规则的错误码,可以先不配置自定义消息,打印校验返回的error.details数组,每个错误项的type字段就是需要填写到messages中的键名,直接复制使用即可避免匹配错误。
内容的提问来源于stack exchange,提问作者Indiestartupman
相关产品推荐
相关产品推荐

