私はおそらく知ることができないキー名を持つオブジェクトがあります-それらはユーザーによって作成されます。しかし、私はそれら(キー)が格納する値と、それら(値)がISO文字列になることを知っています。これらの値を検証するにはどうすればよいですか?そして、オプションで、不明なオブジェクトのキーを検証するにはどうすればよいですか?
_ key: Joi.string().min(2).max(25)
_
私がすでに試したことはJoi APIドキュメントに基づいていました:
プレーンなJSオブジェクトの代わりにJoi.object([schema])を使用するもう1つの利点は、不明なキーを許可するなどのオブジェクトのオプションを設定できることです。
const schema = Joi.object({ arg: Joi.string().valid('firstname', 'lastname', 'title', 'company', 'jobtitle'), value: Joi.string(), }).pattern(/firstname|lastname/, Joi.string().min(2));
例から理解したことは、arg
キーはJoi.object()
のkey
を表し、value
はvalue
を表すということです。
私の例:
_campaign: Joi.object({
arg: Joi.string().valid( 'unknown' ),
value: Joi.date().iso(),
}).pattern( /unknown/, Joi.string().min(2).max(25) )
_
私の入力;
_campaign: { g_ad_adwords: "2017-01-19T11:33:26.205Z" }
_
私のエラー:
[「g_ad_adwords」は許可されていないため、「キャンペーン」は失敗します]
これを試して。基本的にはオブジェクト内のすべてのキーを受け入れますcampaign
と値はJoi.date().iso()
に対して検証する必要があります
campaign: Joi.object().pattern(/^/, Joi.date().iso())
ただし、これはanyキーに一致します。正規表現を少しパディングすることでこれを制限できます。例えば2〜25文字のWord文字のみ
campaign: Joi.object().pattern(/\w{2,25}/, Joi.date().iso())
更新
Joiのドキュメントの 例 については、まだテストしていませんが、これが私の解釈です。彼らが与えた最も簡単な例ではないことは理解できます...
const schema = Joi.object({
arg: Joi.string().valid('firstname', 'lastname', 'title', 'company', 'jobtitle'),
value: Joi.string(),
}).pattern(/firstname|lastname/, Joi.string().min(2));
検証するオブジェクトmustには、2つの属性arg
とvalue
が含まれている必要があります。arg
の値は1つでもかまいません'firstname', 'lastname', 'title', 'company', 'jobtitle'
およびvalue
は単なる文字列です。
{
arg: 'firstname',
value: 'john'
}
{
arg: 'lastname',
value: 'smith'
}
{
arg: 'jobtitle',
value: 'brewer'
}
ただし、オブジェクトに属性firstname
およびlastname
を設定することもできます。これらの値はどちらも2文字を超える文字列です。したがって、上記の例は1つの有効なオブジェクトに圧縮できます。
{
firstname: 'john',
lastname: 'smith',
arg: 'jobtitle',
value: 'brewer'
}