[[Open棟梁>https://github.com/OpenTouryoProject]] wiki -[[戻る>アプリケーション設計のポイント]] *目次 [#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を使用しない)チェック処理に集約するプロジェクトが多い。 -”単項目”チェック処理 -”関連”チェック処理 **リッチクライアント [#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 -