本文へ移動
cccskills
無料GitHub で公開

form-validation

Form validation decision guide: RHF + Zod, client vs server strategy, schema design, error UX, LatAm fields, anti-patterns.

日本語の概要は準備中です。原文の説明を表示しています。

SebastianLuser/claude-code-arcaneスター 3(GitHub 3 + cccskills 0)

実行スコア 未検証

インストール方法を見る

含まれるファイル(1)

  • SKILL.md3.4 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Form Validation — Decision Guide

Core principle: Backend validates for security (sole authority). Client validates for UX only. Use when: forms in React/RN, shared schemas in TS monorepo, LatAm fields, multi-step or async validation. Skip when: Go backend param validation (go-playground/validator), non-user data, trivial filters.

Stack

React Hook Form (uncontrolled, performant) + Zod (schema-first, z.infer for TS types) + @hookform/resolvers/zod. Rejected: Formik (slower), Yup (weaker TS), Joi (backend-only). RN: same stack with Controller.

Validation Strategy

ConcernWhere
Field format/requiredClient (Zod) + backend
Business rulesBackend only
Uniqueness (email, username)Client async (debounce 300ms) + backend
File validationClient (size/MIME via Zod refine) + backend (magic bytes)

Monorepo TS: single Zod schema in shared package for both layers. Backend Go: struct tags + OpenAPI contract (zod-to-openapi / oapi-codegen). CI contract tests.

Schema Design

  • Extract common fields (email, phone, password) into reusable modules
  • Compose with .merge() / .extend(), cross-field logic with .refine() / .superRefine()
  • Multi-step: one schema per step + combined for final submit
  • Password: min 8 + letter + number — no symbols/uppercase (OWASP-aligned)

Error UX

  • Mode: onBlur + reValidateMode: 'onChange' — never onChange from first keystroke
  • Inline errors adjacent to field, never alert() or top-level banners for field errors
  • A11y: aria-invalid + aria-describedby → error with role="alert", auto-focus first error
  • Never clear inputs on failed submit. Map server field errors via setError()

LatAm Fields

Use check-digit libraries, not just regex: CUIT/CUIL (AR) → cuit-validator, RUT (CL) → validar-rut, CPF/CNPJ (BR) → cpf-cnpj-validator, Phone → libphonenumber-js, DNI (AR) → regex 7-8 digits.

Additional Patterns

  • Async: debounce 300ms, inline spinner, do NOT block submit
  • Honeypot: hidden off-screen input, reject silently if filled
  • Multi-step: FormProvider, trigger() per step, persist draft in storage
  • i18n: parameterize messages, recreate schema on locale change or z.setErrorMap
  • Minors: age <13 COPPA / <18 triggers guardian consent flow

Anti-patterns

  • Validating only client-side — backend MUST re-validate
  • Impossible password regex (10+ requirements) — causes reuse
  • Errors before user interacts with field
  • Generic messages ("Invalid") without specifics
  • Duplicated schemas client vs backend TS — use shared package
  • Missing aria-invalid / aria-describedby — breaks WCAG
  • Async validation without debounce

Checklist

  • RHF + Zod + resolver installed
  • Schema shared (monorepo TS) or contract-tested (Go)
  • Backend validates everything client does (and more)
  • onBlur mode, a11y attributes on every input
  • Server errors mapped via setError, LatAm fields use check-digit libs
  • Honeypot + rate limit on public forms

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

Plan, design, and implement A/B tests and experiments with statistical rigor. Covers hypothesis frameworks, sample sizing, metrics, and result analysis.

日本語の概要は準備中です。原文の説明を表示しています。

SebastianLuser/claude-code-arcane32026年10月29日 更新

Web/mobile accessibility decision guide: WCAG 2.2 AA, ARIA, keyboard nav, focus management, contrast, testing. Use for: a11y, accessibility, wcag, aria, screen reader, keyboard, contrast.

日本語の概要は準備中です。原文の説明を表示しています。

SebastianLuser/claude-code-arcane32026年10月29日 更新

Generate, iterate, and scale ad creative for paid advertising across Google, Meta, LinkedIn, and X. Covers platform specs, creative frameworks, and quality validation.

日本語の概要は準備中です。原文の説明を表示しています。

SebastianLuser/claude-code-arcane32026年10月29日 更新

Interactive music for games: vertical layering, horizontal re-sequencing, stingers, transition rules with sync points, and mapping gameplay states to music. Use for: adaptive music, dynamic music system, musical transitions, combat music.

日本語の概要は準備中です。原文の説明を表示しています。

SebastianLuser/claude-code-arcane32026年10月29日 更新

Design multi-agent systems, create agent architectures, define communication patterns, and build autonomous agent workflows with structured evaluation frameworks.

日本語の概要は準備中です。原文の説明を表示しています。

SebastianLuser/claude-code-arcane32026年10月29日 更新

Inter-agent communication protocol for C-suite agent teams. Defines invocation syntax, loop prevention, isolation rules, response formats, and quality loops.

日本語の概要は準備中です。原文の説明を表示しています。

SebastianLuser/claude-code-arcane32026年10月29日 更新

SebastianLuser のスキルをすべて見る

このスキルの問題を報告する