web-dev-qa-db-ja.com

Yupを使用して文字列または数値の長さをチェックする検証

特定の長さを検証するyup関数はありますか?

.min(5).max(5)を試しましたが、数字が正確に5文字になるようにしたいのです(つまり、郵便番号)。

17
reectrix

何も組み込まれているとは思いませんが、 test で実装するのは簡単です。

yup.string()
  .test('len', 'Must be exactly 5 characters', val => val.length === 5)

https://runkit.com/tamlyn/5ad9b99a4ba1230012d7ac21

5
Tamlyn

@efruの answer は、22文字未満の数字に最適です。ただし、val.toString().lengthは、22文字を超える数値に対しては機能しません。これは、JavaScriptで文字列に変換すると、大きな数値が指数形式に変換されるためです。

私が最も効果的に機能することがわかったソリューションは次のとおりです。

Yup.number()。test( 'len'、'25文字でなければなりません '、val => Math.ceil(Math.log10(val + 1))=== 25)

0
tschumann

今後の参考のために、数値(郵便番号)を検証する場合は、上記のソリューションで少し微調整する必要があります。関数は次のとおりです。

Yup.number().test('len', 'Must be exactly 5 characters', val => val.toString().length === 5)

.lengthは数値では機能せず、文字列でのみ機能します。

0
efru