Featured image of post ZodのemailバリデーションでRFCで違反はないのにエラーになってしまった話

ZodのemailバリデーションでRFCで違反はないのにエラーになってしまった話

Twitter ツイート Hatena Bookmark ブックマーク

ZodのEmailバリデーションでとくに問題ないメールアドレスなのにエラーっていわれてしまった。 Zodのバージョンは [email protected] なので 2023/08/01時点で最新かと思います。

そのようなメールアドレスが問題なのか?

上記のメールアドレスにおいて、ドメイン部のハイフンがエラーになると怒らました。
どうやら c.email.polidog.jp もしくは em-ail.polidog.jp なら問題ないようです。

問題はなにか?

メールアドレス用の正規表現に問題があるようです。

https://github.com/colinhacks/zod/blob/22f3cc6ed52a28c984a0319a1a03e1af244cee02/src/types.ts#L553

どの用に対処するべきか?

じつはmasterブランチではこの問題は修正されています。

https://github.com/colinhacks/zod/blob/78a409012a4dc34a455f5c4a7e028ca47c921e1b/src/types.ts#L560

自分の場合は email() を使わずに regex() でメールアドレスのバリデーションをするように修正しました。
そのうち新しいバージョンがリリースされたら再度 email() を使うと思っています。

1
2
3
4
5
6
export const loginSchema = z.object({
  email: z.string().regex(/^([A-Z0-9_+-]+\.?)*[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i, { message: '不正なメールアドレスです' }),
  password: z
    .string()
    .nonempty({ message: 'パスワードを入力してください' }),
})

参考

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。