Oteto Blogのロゴ

【zod】NumericなStringをNumberに変換する

zodでNumericな(数字のみで構成される)文字列を取り扱いたい時がある。

const schema = z
  .string()
  .transform(Number);

schema.parse('123'); // 123
schema.parse('hoge'); // NaN

上記のように文字列の判定をせずString → Numberに変換するともちろんNaNとなってしまうが、組み込みでnumeric()のようなものは無い。

解決法

const schema = z
  .string()
  .regex(/^\d+$/, { message: '数値の文字列を入力してください' })
  .transform(Number);

schema.parse('123'); // 123
schema.parse('hoge'); // ZodError

regex()で、数値のみで構成されているかを判定するのが手っ取り早そう。