🚀 新規事業

validation-helpers

最終更新 2026年05月09日 / 40_新規事業/SCALE_Build/カタログ/機能集/validation-helpers.md

バリデーションヘルパ集

用途

Email・URL・電話・必須・長さ・パターン等の汎用バリデーション。zod 不要の軽量版。

特徴

  • 一通り揃ったvalidator
  • メッセージ日本語
  • 型推論
  • チェーン可

コード(コピペ用)

type ValidResult = { ok: true } | { ok: false; msg: string };

export const v = {
  required: (val: any): ValidResult =>
    (val == null || val === '') ? { ok: false, msg: '必須項目です' } : { ok: true },

  email: (val: string): ValidResult =>
    /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val) ? { ok: true } : { ok: false, msg: 'メールアドレス形式が不正です' },

  url: (val: string): ValidResult => {
    try { new URL(val); return { ok: true }; }
    catch { return { ok: false, msg: 'URL形式が不正です' }; }
  },

  phone: (val: string): ValidResult =>
    /^[\d\-+()\s]{10,}$/.test(val) ? { ok: true } : { ok: false, msg: '電話番号の桁が不足しています' },

  minLength: (n: number) => (val: string): ValidResult =>
    val.length >= n ? { ok: true } : { ok: false, msg: `${n}文字以上で入力してください` },

  maxLength: (n: number) => (val: string): ValidResult =>
    val.length <= n ? { ok: true } : { ok: false, msg: `${n}文字以内で入力してください` },

  pattern: (re: RegExp, msg = '形式が不正です') => (val: string): ValidResult =>
    re.test(val) ? { ok: true } : { ok: false, msg },

  // チェーン: 複数バリデータを順に評価
  all: (...validators: Array<(v: any) => ValidResult>) => (val: any): ValidResult => {
    for (const fn of validators) {
      const r = fn(val);
      if (!r.ok) return r;
    }
    return { ok: true };
  },
};

// 使い方:
// const r = v.all(v.required, v.email)('user@example.com');
// if (!r.ok) alert(r.msg);

使い方

対象プロジェクトに該当ファイルをコピーして、props を流し込むだけ。

注意事項

  • 依存パッケージを忘れず追加