使用JOI验证仅含指定枚举值的逗号分隔字符串
使用JOI验证逗号分隔的指定字符串值
核心实现代码
直接用JOI的内置方法替代自定义函数逻辑,代码更简洁且自带错误提示:
const Joi = require('joi'); // 定义允许的有效值集合 const allowedValues = ['admin', 'client', 'customer', 'user']; // 构建验证规则 const permissionSchema = Joi.string() .split(',') // 把逗号分隔的字符串拆成数组 .items(Joi.string().valid(...allowedValues)) // 每个元素必须是允许的有效值 .required(); // 可选:如果字段必填就保留,非必填可删除
测试验证场景
对应你给出的测试用例,验证结果如下:
permissionSchema.validate('admin,client,customer')→ 验证通过permissionSchema.validate('customer')→ 验证通过permissionSchema.validate('admin,client,buyer')→ 验证失败(包含未允许的buyer)permissionSchema.validate('buyer')→ 验证失败permissionSchema.validate('admin,client,customer,buyer')→ 验证失败
补充细节
- 如果输入可能带空格(比如
admin, client),可以给split()加配置自动去空格:.split(',', { trim: true }) - 要获取具体错误信息,可以这样处理:
const { error } = permissionSchema.validate('admin,buyer'); if (error) { console.log(error.details[0].message); // 会提示"value" must be one of [admin, client, customer, user] }
内容的提问来源于stack exchange,提问作者D Singh
相关产品推荐
相关产品推荐

