我在為此輸入創建 Joi 架構時遇到問題
{
projects: ["*","ABC123","ABC456"]
}
使用上面的輸入,它應該會引發錯誤。
我確實嘗試過這樣Joi.alternatives()使用
const schema = Joi.object({
projects:
Joi.array()
.items(
Joi.alternatives(
Joi.string().equal('*'),
Joi.string().regex(new RegExp(/^ABC_([0-9]{3,3})$/))
)
)
})
但它似乎允許兩者["*"]兼而有之["ABC123","DEF456"]。我希望它是["*"]or ["ABC123","DEF456"],否則它將是一個錯誤。
我怎樣才能通過使用 Joi 來實作它?
uj5u.com熱心網友回復:
你可以嘗試這樣的事情:
const schema = Joi.object({
projects: Joi.alternatives(
Joi.array().length(1).items(
Joi.string().equal('*')
),
Joi.array().items(
Joi.string().regex(/^ABC[0-9]{3}$/)
)
)
});
也就是說,擁有兩個可選的陣列模式,而不是擁有一個具有可選元素模式的陣列模式。
如果您想拒絕這樣的陣列,則可以拒絕值,否則可以省略.length(1)。["*", "*"]
此外,正則運算式可以用更簡單的方式撰寫,因此我對其進行了簡化,但我想這只是一個示例,因此并不那么重要。重要的是我從正則運算式中洗掉了下劃線(“_”),因為您示例中的正則運算式與示例中的“ABC123”之類的值不匹配,但例如“ABC_123”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/451550.html
標籤:javascript 节点.js 乔伊
