次のスキーマがあるとします。
var schema = {
fieldOne: Joi.string().required(),
fieldTwo: Joi.string().required()
};
両方のフィールドの値が異なるかどうかを確認する検証ルールを設定することはできますか?
次のスキーマがあるとします。
var schema = {
fieldOne: Joi.string().required(),
fieldTwo: Joi.string().required()
};
両方のフィールドの値が異なるかどうかを確認する検証ルールを設定することはできますか?
はい、そうです。これを行うには、Joi.refand Joi.invalid( にエイリアス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、同じ値を許可しないことで機能します。