「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>アプリケーション設計のポイント]]

*目次 [#f810116d]
#contents

*概要 [#y339d05c]
-入力値チェックの処理方式についてまとめている。
-実装は「[[バリデーション機能付きカスタム コントロール]]」を参照。

*実装箇所 [#d8f7e3e0]

**Web [#ide24171]
ASP.NETのValidatorコントロールを使用した場合、クライアントサイドのJavaScriptを使用した”単項目”チェック処理が実装可能。

-@IT:解説:ASP.NETで学ぶVisual Studio .NETの魅力~
第2回 Visual Studio.NETでプログラム・レス開発を学ぶ(前半)

--http://www.atmarkit.co.jp/fdotnet/aspandvs/aspandvs02/aspandvs02_04.html
>検証コントロールを利用することで、まさにプログラム・レスで検証処理を実現することができ、~
しかも、その検証はクライアント/サーバ双方をカバーするため、きわめて堅牢な処理を実現できる。

--http://www.atmarkit.co.jp/fdotnet/aspandvs/aspandvs02/aspandvs02_05.html
>冒頭やページ末尾などにまとめてエラー・メッセージを表示させたいという場合には、~
個々の検証コントロールを末尾に配置するのではなく、ValidationSummaryコントロールを使用するのが一般的。

***JavaScript [#h7dfb6f5]
JavaScriptの”単項目”チェック処理は実装しないケースが多い。

-理由
--チェック部品の仕様がまちまちなので、自分で作りたくないが、適合する軽量なライブラリがない。
--クライアント側バリデート機能との兼ね合いで、サーバ側のバリデート機能で、背景赤表示などを実装すると、クライアント側バリデート機能との表示に関する整合性が取れなくなる

***サーバー側 [#l3d22ba6]
Validatorコントロール(検証コントロール)では、エラー メッセージ表示方法の制限が多く、画面設計によってはValidatorコントロールが使用できなくなるので、~
最近は、P層(wwwブラウザ)側でチェック処理を実装しないでP・B層(サーバ)側の(Validatorを使用しない)チェック処理に集約するプロジェクトが多い。
-[[”単項目”チェック処理>#p43b7824]]
-[[”関連”チェック処理>#ga0cb6fd]]

**リッチクライアント [#f4cdde64]
***クライアント側 [#efa1b927]

-Windows Forms~
Control.Validatingイベントで”単項目”チェック処理をする。focus移動の制御はしないほうが無難。

--MSDN > .NET Frameworkクラス ライブラリ リファレンス > System.Windows.Forms.Control.Validatingイベント~
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.validating.aspx

--Windowsフォーム上のコントロール データの検証~
http://msdn.microsoft.com/ja-jp/library/44sk2xyx.aspx
>テストが失敗した場合は、Validating イベントの CancelEventArgs の Cancel プロパティが true に設定されるようにします。~
これにより、Validating イベントがキャンセルされ、コントロールにフォーカスが戻ります。~
その結果、ユーザは有効なデータを入力するまでこのコントロールから移動できません。

-WPF
--データバインディングとバリデーションのフレームワークを使用して”単項目”チェック処理をする。~
https://github.com/OpenTouryoProject/SampleProgram/tree/master/UISubsystem/WPF/Validation
--WPFのバリデーション フレームワークではフォーカス移動の際のチェックは実装(推奨)されていない。

***サーバー側 [#rdd8793f]
必ずクライアントのチェックを抜けて電文が飛んで来るので、サーバーサイドは”関連”チェック処理のみ実装するケースが多い。

*”単項目”チェック処理 [#p43b7824]
以下の実装が参考になる。

-カスタムコントロール
--CheckType~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/CustomControl/PropertyGrid/CheckType.cs
--WebCustomTextBox~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/CustomControl/Control/WebCustomTextBox.cs
--WinCustomTextBox~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/CustomControl/RichClient/Control/WinCustomTextBox.cs

-共通関数
--StringChecker~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Str/StringChecker.cs#L258
--FormatChecker~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Str/FormatChecker.cs

**必須入力 [#t4df8ad7]
項目が入力されているか

**数値 [#k38fa24b]
数値か?

-IsNumeric() : 数字(double)に変換可能~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Str/StringChecker.cs#L75
-IsNumbers() : 先頭から末尾まで、0-9, 0-9が0回以上連続マッチ~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Str/StringChecker.cs#L99

**日付 [#ldfd9a77]
日付か?

-DateTime.TryParse()で確認可能。

**文字 [#y981fbfc]
***半角文字 [#oc969534]
半角文字か?

-IsHankaku() : 先頭から末尾まで、「[ ]-~、。-゚」が0回以上連続マッチ~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Str/StringChecker.cs#L158

***全角文字 [#n1b12af2]
全角文字か?

-IsZenkaku() : 先頭から末尾まで、「[ ]-~、。-゚」(を除く)が0回以上連続マッチ~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Str/StringChecker.cs#L173

***片仮名 [#i845c2f4]
片仮名か?

-IsKatakana() : IsKatakana_Hankaku() or IsKatakana_Zenkaku()~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Str/StringChecker.cs#L258

***半角片仮名 [#xab70089]
半角片仮名か?

-IsKatakana_Hankaku() : 先頭から末尾まで、ヲ-゚が0回以上連続マッチ~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Str/StringChecker.cs#L288

***平仮名 [#v0afe100]
平仮名か?

-IsHiragana() : 先頭から末尾まで、ぁ-ゞが0回以上連続マッチ~
https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/C%23/Frameworks/Infrastructure/Public/Str/StringChecker.cs#L241

***参考 [#ae0e8493]
-[[文字のチェック方式 - マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/index.php?%E6%96%87%E5%AD%97%E3%81%AE%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%E6%96%B9%E5%BC%8F]]

**正規表現チェック [#wf5a9f19]
-[[正規表現 - マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/index.php?%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE]]

**禁則文字チェック [#jf6e384f]
-禁則処理 - Wikipedia~
https://ja.wikipedia.org/wiki/%E7%A6%81%E5%89%87%E5%87%A6%E7%90%86
-

*”関連”チェック処理 [#ga0cb6fd]
DB側の状態を使用したチェックなので2C/Sアーキテクチャの場合を除いてサーバ側でチェックする必要がある。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS