簡體   English   中英

Joi 驗證架構 - 兩個字段不能具有相同的值

[英]Joi validation schema - two fields must not have the same value

假設我有以下架構:

var schema = {
  fieldOne: Joi.string().required(),
  fieldTwo: Joi.string().required()
};

是否可以設置驗證規則來檢查兩個字段是否具有不同的值?

是的。 你可以通過使用Joi.refJoi.invalid (別名為Joi.disallow )來實現這Joi.disallow 對於您的特定示例,它將是:

var assert = require('assert');
var Joi = require('joi');

var schema = Joi.object().keys({
  fieldOne: Joi.string().required(),
  fieldTwo: Joi.string().disallow(Joi.ref('fieldOne')).required()
});

測試它會讓我們得到我們期望的結果:

assert.ok(Joi.validate(4, schema).error !== null);
assert.ok(Joi.validate({ fieldOne: 'a', fieldTwo: 'a' }, schema).error !== null);
assert.ok(Joi.validate({ fieldOne: 'a', fieldTwo: 'b' }, schema).error === null);

它的工作原理是在fieldOne的定義中fieldTwo並禁止相同的值。

不幸的是,我不確定是否存在對不同值的直接驗證,但您可以嘗試使用array#unique()代替:

var schema = {
  fieldOne: Joi.string().required(),
  fieldTwo: Joi.string().required(),
  fieldOneAndTwo: Joi.array().unique()
};

並在驗證之前設置fieldOneAndTwo = [fieldOne, fieldTwo]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM