😀
Zodで空白文字をのみバリデーションで弾く方法
zodでnoemptyを設定しているのに、意図した通りに動作しない・・。
空白文字列のみを弾きたい時にnoemptyを使えばいけるだろうと思っていたところどうやらそうではなかった。
Zodで空白文字のみを弾く
Zodでは文字列の入力を必須にする場合は下記のようにnoemptyを設定すればエラーにできる。
import { z } from 'zod'
{
hoge: z.string().noempty()
}
これで入力した文字が「空白/半角スペース」だけの場合も弾けると思っていたところ、noemptyは空白すら入力されていない場合のみ弾くことが可能ということがわかった。
そこで、空白文字を弾くためにrefineで空白以外の文字列の長さを判定することでやりたいことが実現できました。
z.string().refine((value) => {
return Boolean(value.trim().length)
}, 'エラーメッセージ'),
Discussion
zodのv3.17.0以降だと
trim
が実装されているので、利用できるならそちらでも良いかもしれません。