Nodejs - Joi检查字符串是否在给定列表中

Sal*_*lar 12 node.js joi

我正在使用Joi包进行服务器端验证.
我想检查一个给定的字符串是否在给定的列表中,或者它是否不在给定的列表中.(定义黑名单或值列表的白名单),
"in""notIn"函数.我可以这样做吗? ?

var schema = Joi.object().keys({
    firstname: Joi.string().in(['a','b']),
    lastname : Joi.string().notIn(['c','d']),
});
Run Code Online (Sandbox Code Playgroud)

tho*_*sin 31

You are looking for the valid and invalid functions.
v16: https://hapi.dev/module/joi/api/?v=16.1.8#anyvalidvalues---aliases-equal
v17: https://hapi.dev/module/joi/api/?v=17.1.1#anyvalidvalues---aliases-equal

As of Joi v16 valid and invalid no longer accepts arrays, they take a variable number of arguments.

Your code becomes

var schema = Joi.object().keys({
    firstname: Joi.string().valid(...['a','b']),
    lastname: Joi.string().invalid(...['c','d']),
});
Run Code Online (Sandbox Code Playgroud)

Can also just pass in as .valid('a', 'b') if not getting the values from an array (-:

  • @BadriDerakhshan:如果你谈论的是“@hapi/joi”,那么就不再有“@hapi/joi”了!该软件包上个月已被弃用,Joi 正式回归 Joi。(https://www.npmjs.com/package/@hapi/joi)(`@hapi/joi` 中也存在有效和无效的情况)- 这有点令人沮丧,因为用户必须从 Joi 切换到 @hapi/去年 joi,一年后又回到 Joi :-) (2认同)

Rob*_*kal 15

怎么样:

var schema = Joi.object().keys({
    firstname: Joi.string().valid(['a','b']),
    lastname : Joi.string().invalid(['c','d']),
});
Run Code Online (Sandbox Code Playgroud)

别名:.allow和.only

和.disallow和.not

  • 这不再有效,因为“有效”不再接受数组类型的参数 (8认同)