You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:22:38