是否可以从一组定义的字段中要求至少一个字段?
Posted
技术标签:
【中文标题】是否可以从一组定义的字段中要求至少一个字段?【英文标题】:Is it possible to require at least one field from a set of defined fields? 【发布时间】:2017-08-23 12:35:48 【问题描述】:给定这样的定义:
const querySchema = joi.object(
one: joi.string().min(1).max(255),
two: joi.string().min(1).max(255),
three: joi.string().min(1).max(255),
);
有没有办法要求至少有一个这些字段?我不在乎是哪一个。
注意:为此 SO question 提供的解决方案对我没有用,因为我有 7 个字段并且它们可能会增长,所以做所有可能的组合是不行的。
在Joi API Reference 中找不到任何可能对此用例有用的方法。
非常感谢任何帮助。
【问题讨论】:
【参考方案1】:如果您真的不在乎需要哪一个,那么您可以使用object().min(1)
确保对象中至少有一个键。
const querySchema = joi.object(
one: joi.string().min(1).max(255),
two: joi.string().min(1).max(255),
three: joi.string().min(1).max(255),
).min(1);
必须至少需要一个密钥(one
、two
、three
)。名称与这三个不同的键将被拒绝。
【讨论】:
【参考方案2】:除了@Ankh 建议的方法之外,还找到了另一种方法,在documentation,但我之前找不到:
const schema = joi.object(
a: joi.number(),
b: joi.number(),
).or('a', 'b');
如果需要一组特定的键,这种方法很好,而@Ankh's 更好,因为我的这个问题标题和你有很多键,所以我选择他的答案而不是我的对的。
只是想以另一种方式离开这里。
【讨论】:
文档链接已过时 - 该锚点不再存在。这个会带你到文档的那个部分:github.com/sideway/joi/blob/master/API.md#objectorpeers-options以上是关于是否可以从一组定义的字段中要求至少一个字段?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查用户是不是使用 jQuery/Javascript 从一组复选框中选中了至少一个复选框?