Skip to content

OTR_InputValidation

nishi_74322014 edited this page Oct 27, 2026 · 1 revision

入力値のチェック

概要

入力値チェックの処理方式。

  • サーバ側の検証は必須である。リクエストは直接送れるので、クライアント側のチェックだけでは守れない。
  • 近年は、P・B 層(サーバ)に検証を集約する傾向がある。クライアント側のチェックは UX の補助と位置付ける。
  • 入力チェックのエラーは業務例外で返す(やり直せるので、システム例外にしない)。

詳細

チェックの種類

種類 内容 どこで
単項目チェック 必須、型(数値・日付)、桁数・範囲、文字種、正規表現、禁則文字 P 層(画面)、サーバ側でも
関連チェック 項目間の相関、DB の状態を使うチェック B 層
業務チェック 業務ルール(在庫、限度額 など) B 層

実装箇所

UI クライアント側 サーバ側
Web ASP.NET の Validator コントロール(制約が多く、使用を絞る傾向) 単項目・関連チェックを集約
Windows Forms Control.Validating イベントで単項目チェック(フォーカス移動の制御はしない方が無難) 関連チェック
WPF データ・バインディングとバリデーションの仕組み 関連チェック

部品

部品 用途
StringChecker IsNumeric / IsNumbers / IsHankaku / IsZenkaku / IsHiragana / IsKatakana / IsKanji / IsShift_Jis など
FormatChecker 日本向けの書式(IsJpZipCode、IsJpTelephoneNumber、IsJpCellularPhoneNumber など)
DateTime.TryParse / decimal.TryParse 日付、数値
バリデーション機能付きカスタム・コントロール WebCustomTextBox / WinCustomTextBox(CheckType で必須・数値・禁則文字などを宣言的に指定)

詳しくは共通部品を参照。

単項目チェックの標準化

  • カスタム・コントロールにチェック種別を宣言し、サブミット系のイベント処理で Control ツリーを再帰的に走査して、一括でチェックする。
  • 実装するのは画面コードクラス(開発者)である。

エラーの返し方

// B 層での関連チェック
if (!StringChecker.IsNumeric(pv.Quantity))
{
    throw new BusinessApplicationException("E0101", "数量", "数値ではありません");
}

コーディング・エージェントに任せる場合

  • スキル opentouryo-app-design(references/input-validation.md)と opentouryo-common-parts を使わせる。
  • エージェントは正規表現を自作しがちなので、既存の部品を使っているかを確認する。

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally