• 締切済み

RegularExpressionValidatorのタイミング

はじめまして VS2005でasp.netでwebサイトの開発をしているものです 質問なのですが RegularExpressionValidatorの検証機能のタイミングを フォーカスが離れたときではなく入力されたときにしたいのですが できますでしょうか? RegularExpressionValidatorのControlToValidateを テキストボックスに指定して、ValidationExpressionに正規表現を 設定する簡単な検証なのですが、 現在、この検証を行うタイミングがフォーカスが離れた瞬間 なのですが、これをキー操作で入力した瞬間に正規表現に 適さない場合はすぐにErrorMessageを出すようにしたいです このようなことは可能なのでしょうか? ご存知の方ご回答の方、よろしくお願いします

みんなの回答

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

まず、キーが入力された段階でチェックさせるには、 JavaScriptの力を借りる必要があります。 ただ、RegularExpressionValidatorには、JavaScriptで チェックさせるプロパティはありません。 CustomValidatorであれば、JavaScriptでチェックできますが、 それだと、Focusを離れた場合でしか、チェックができません。 そこで、チェック対象のテキストボックスにJavaScriptの onKeyPressイベントを感知するようにし、onKeyPressイベントを 処理するJavaScriptを記述します。 そのJavaScriptで正規表現チェックを行い、エラーがあれば、 RegularExpressionValidatorのErrorMessageを visibilityを設定することによって、表示させます。 サンプルを作りましたので、ご参考頂ければと思います。 サンプルは、99:99の書式&5桁かをチェックしています。 5桁目が入力された段階でチェックするようにしています。 また、IEでしか動作確認してませんので、FireFoxや他のブラウザ に対応させるには、もう少しカスタマイズが必要です。 ■Default2.aspx <%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>無題のページ</title> <script language="JavaScript" type="text/javascript"> function TextBoxControl_Validate(e, textboxId, regularexpressionValidatorId) {   // エラーメッセージを一旦非表示にする   var errorMessage = document.getElementById(regularexpressionValidatorId);   if ( errorMessage == null ) { return false; }   errorMessage.style.visibility = "hidden";   // チェック対象のテキストボックスの取得   var checkTextBox = document.getElementById(textboxId);   if ( checkTextBox == null ) {     return false;   }   // 入力値を取得する   var key = null;   if(window.event)   {     key = e.keyCode   }   else if(e.which)   {     key = e.which   }   var inputChar = String.fromCharCode(key);   // 既に入力されている値と今入力した値の桁数が5桁でない場合   if ( !(checkTextBox.value.length + inputChar.length == 5) )   {     return true;   }   // 正規表現でチェック   var str = checkTextBox.value + inputChar;   if (str.match(/^\d{2}\:\d{2}$/))   {     return true;   }   else   {     // エラーメッセージの表示     errorMessage.style.visibility = "visible";     // 入力文字が消えるため、戻り値はTrueにしておく     return true;   }   return false; } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:RegularExpressionValidator   ID="RegularExpressionValidator1"   runat="server"   ControlToValidate="TextBox1"   ErrorMessage="エラーです。"   SetFocusOnError="True"   ValidationExpression="\d{2}\:\d{2}" /> <br /> <asp:TextBox ID="TextBox1" runat="server" MaxLength="5" /> <br /> <asp:Button ID="Button1" runat="server" Text="Button" /> </div> </form> </body> </html> ■Default.aspx.vb Partial Class Default2   Inherits System.Web.UI.Page   Protected Sub RegularExpressionValidator1_Init(ByVal sender As Object, ByVal e As System.EventArgs) _                      Handles RegularExpressionValidator1.Init     If Not IsPostBack Then       Dim keyPressScript As String       keyPressScript = String.Format("return TextBoxControl_Validate(event, '{0}', '{1}')", _                       Me.TextBox1.ClientID, _                       Me.RegularExpressionValidator1.ClientID)       Me.TextBox1.Attributes.Add("onKeyPress", keyPressScript)     End If   End Sub End Class

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • イベントのキャンセル

    VS2005standardのVB.NETで開発しています。 質問: テキストフィールドからフォーカスアウトした瞬間に形式チェックロジックを走らせていますが、画面の右下に設置した「キャンセルボタン」を押下するタイミングでフォーカスアウトしたら、イベントをキャンセルしたい 要するにキャンセルして画面を閉じたいのに、フィールドの入力形式がが違うとエラーが出るので、うっとうしいのです。 こういう場合の簡単な対応方法ってありますか? お教えください。

  • ASP.NET 動的コントロールのフォーカス移動

    ASP.NET(VB)で開発しています。 Page_init時に生成されるテキストボックス1、2(動的コントロール)を表示します。 テキストボックス1のテキストチェンジイベント時に テキストボックス2にフォーカスが移動するようにしたいです。 テキストチェンジでPostBackが発生し、サーバ側でテキストボックス2.Focus() と記述しているのですが、動作は、テキストボックス2に フォーカスが移らず、画面上のどこにもフォーカスがあたっていない状態になってしまいます。 動的コントロールへ、PostBack時にフォーカス移動させるにはどうしたら良いか お願いいたします。

  • チェックボックスのオンフォーカスについて

    チェックボックスにフォーカスが当たると、テキスト部にフォーカスが当たると思われるのですが、現開発ではチェックボックスのテキストプロパティには何も入力をしない仕様になってしまいました。 当然、Tab移動時等で該当するチェックボックスにフォーカスが当たってるのですが、外見ではフォーカス状態がわかりません。 フォーカスをテキスト部ではなく、チェックする部分にフォーカスを当てる方法はありませんでしょうか? どなたか、ご教授をお願いいたします。

  • 文字入力モードの切り替え

    はじめまして。 いきなりで申し訳ありませんが、よろしくお願いします。 Aテキストボックスにはひらがな Bテキストボックスには半角英数 Cテキストボックスにはカタカナ テキストボックスにフォーカスしたときに自動でIMEが切り替わり、それぞれに設定した文字で入力する。 と言う設定をしたいのですが、ソフトを立ち上げても右下のタスクバーにIMEが表示されておらず、テキストボックスにフォーカスしてもうまく機能しないのです。 一度でも「Alt+半角/全角」でIMEを右下のタスクバーに表示してやるとそれ以降はうまくいくのですが・・・・・ ソフトを立ち上げたときにIMEが機能するようにしたいのですがどうすればよいでしょうか? なにぶん初心者なのでわかりにくい質問かと思いますが、よろしくお願いします。 環境:VB2008 VS2008Express Editionで開発しています。

  • JSFでロストフォーカスイベント

    JBOSS SEAMで開発をしており、JSFにてテキストボックスに入力し、フォーカスが外れた時に、その下にあるテキストボックスに上で入力された値の消費税額を表示したいのですが、ロストフォーカスイベントの設定方法がわかりません。方法はないでしょうか?

  • Flash Lite 1.1 テキスト入力について

    テキスト入力についての質問です。 Flashlite1.1でユーザーがテキストを入力し、その入力内容を送信するという携帯用Flashを作りたいと思っています。 テキストツールで普通にテキスト入力ボックスを設置すると 『上キー、或いは下キーでフォーカスをあてる⇒選択キーを押す⇒テキスト入力画面が開かれる』 というような流れですが、希望としてはこの流れを 『5キーを押す⇒テキスト入力画面が開かれる』 というように変えたいのです。 可能なのか不可能なのか、可能ならばどのようにすれば実現できるのか… どなたかご存知の方がおりましたら、よろしくお願いします。

  • VS2005 ASP.NET 入力チェック

    VS2005 ASP.NETで テキストボックスに数字を入力する際に 5ケタまで入れないとエラーメッセージが出る というような処理はどうしたらいいでしょうか?

  • C# ワイルドカードを使用した検索ツール

    プログラミング初心者です。 現在VS.NETで検索ツールを作成しているんですが、 ワイルドカードを指定してテキストボックスのテキストから 検索を行うためにはどのようにしたら良いんでしょうか?? 探してみましたが正規表現とごちゃごちゃになってしまい…… 教えて頂きたいです。

  • カーソル移動と同時にデータを表示させたい

    はじめまして。ASPは少しかじった程度のレベルです。 テキストボックスがa~cまであるとして、 ボックスaに「00001」という値を入れ、カーソルを移動した瞬間に bに「ope1」、cに「center1」と表示させたいと考えています。 どうすればよいか教えてください。 また、将来はDB連携を取ってボックスaの値をキーにb,cに該当データを 表示させようとしています。 どのタイミングでSQL文を書けばよいのか教えて頂けたらこれまたありがたいです

  • ボタンの強調表示について

    VB2005でテキストボックスとOKボタン、キャンセルボタンのあるフォームを作成しようとしています。現状ではテキストボックスにフォーカスがある時は、OKボタンが強調表示されないのですが、テキストボックスにフォーカスがある時でもOKボタンが強調表示され、テキストボックスに文字を入力した後Enterキーを押すとOKボタンが押されるようにはできないでしょうか? 初歩的な事かもしれませんが、いろいろ調べても判りませんでした。どなたか教えていただけると幸いです。よろしくお願い致します。