😀

Zodで空白文字をのみバリデーションで弾く方法

2022/07/11に公開1

zodでnoemptyを設定しているのに、意図した通りに動作しない・・。

https://github.com/colinhacks/zod

空白文字列のみを弾きたい時にnoemptyを使えばいけるだろうと思っていたところどうやらそうではなかった。

Zodで空白文字のみを弾く

Zodでは文字列の入力を必須にする場合は下記のようにnoemptyを設定すればエラーにできる。

import { z } from 'zod'

{
  hoge: z.string().noempty()
}

これで入力した文字が「空白/半角スペース」だけの場合も弾けると思っていたところ、noemptyは空白すら入力されていない場合のみ弾くことが可能ということがわかった。

そこで、空白文字を弾くためにrefineで空白以外の文字列の長さを判定することでやりたいことが実現できました。

z.string().refine((value) => {
  return Boolean(value.trim().length)
}, 'エラーメッセージ'),

Discussion