- PR -

RegularExpressionValidator と ValidationSummary で全角が半角と区別されないです

1
投稿者投稿内容
tokyo_eye
会議室デビュー日: 2003/09/11
投稿数: 12
投稿日時: 2003-12-10 13:29
こんにちは。
ASP.NETをC#で作っております。

ただいまユーザ登録用の入力フォームを作っています。
郵便番号の一つ目(半角数字3文字)のTextBoxをチェックするために,以下のようにRegularExpressionValidatorを用いています。

<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator id="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1" ErrorMessage="形式が不正です" ValidationExpression="^\d{3}$" Display="Dynamic">*</asp:RegularExpressionValidator>

ウェブフォーム上に単独のTextBoxを作成して,上記RegularExpressionValidatorを設けたものでは,例えば全角の数字3文字「123」などでValidationSummaryにもエラーメッセージが表示されます。
ここまではよいのですが,入力フォームに色々なテキストボックスとそれに対する検証コントロールを増やしていくうちに,なぜか全角の数字3文字は検証を通ってしまうようになってしまいました!
(エラーが出ているウェブフォームでは,TextBoxが20程度あり,それぞれRequiredFieldValidatorやCustomValidator,上記と同様のRegularExpressionValidatorを配しています)

RegularExpressionValidatorのDisplayプロパティを「Dynamic」にしているのですが,当該TextBoxに「123」などと全角数字を入力した後にフォーカスを移動したときは,RegularExpressionValidatorに指定した「Text」がちゃんと表示されます。
「abc」などアルファベットを入力した場合や「1234」など文字数を超えた場合などはきちんとエラーを表示してくれているのですが,3文字の全角数字だけは通ってしまう現状です。

ためしに,CustomValidatorを配してRegexクラスを用いて検証しても結果は同じでした。

何か分かる方がいたら教えて頂きたいと思います。
よろしくお願いします。


開発環境は,
Windows 2000 Pro, IIS5.0
Visual C# 2003
です。

[ メッセージ編集済み 編集者: tokyo_eye 編集日時 2003-12-10 13:52 ]
He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2003-12-10 20:19
リファレンスに、"\d"は『ECMAScript の動作による Unicode の \p{Nd} および Unicode 以外の [0-9] と同じ』と記述されています。[参照]
全角"0"〜"9"は、UNICODEの"FF10"〜"FF19"なので、コレは\p{Nd}に一致します[参照]

なので、
引用:
なぜか全角の数字3文字は検証を通ってしまうようになってしまいました!


正しい動作なのですが、以前は検証を通らなかったとのことなのでちょっと引っかかります。

今、試せる環境がないので憶測で書きます。
<憶測>
EnableClientScriptあたりが怪しい気がします。
JavaScriptでは全角数字と"\d"が一致しないのではないでしょうか?
で、EnableClientScriptの値によって検証を通ったり通らなかったりするのでは?
</憶測>

とりあえず、正規表現中の"\d"を[0-9]にしておけば、半角数字のみのチェックとなります。
tokyo_eye
会議室デビュー日: 2003/09/11
投稿数: 12
投稿日時: 2003-12-10 21:58
Heさんご返答ありがとうございます。

引用:

Heさんの書き込み (2003-12-10 20:19) より:
リファレンスに、"d"は『ECMAScript の動作による Unicode の p{Nd} および Unicode 以外の [0-9] と同じ』と記述されています。[参照]
全角"0"〜"9"は、UNICODEの"FF10"〜"FF19"なので、コレはp{Nd}に一致します[参照]



なるほど,そうゆうことでしたか。
リファレンスの文章が読解できていなかったです。。

引用:

EnableClientScriptあたりが怪しい気がします。
JavaScriptでは全角数字と"d"が一致しないのではないでしょうか?
で、EnableClientScriptの値によって検証を通ったり通らなかったりするのでは?



EnableClientScriptは常にデフォルトのTrueで使っていました。
これをFalseにしてTextBoxとRegularExpressionValidatorのみのサンプルを作ってみたら,上記ご指摘のとおり全角の数字でも検証が通るようになりました。

EnableClientScriptをTrueのままコントロールを増やしていっていつのまにか検証にひっかからなくなってしまうのはよく分からないですが,
Falseにして[0-9]などの検証をおこなおうと思います。

ありがとうございました!
He
大ベテラン
会議室デビュー日: 2002/12/18
投稿数: 141
投稿日時: 2003-12-10 22:46
<憶測>
"\d"でなく"[0-9]"でチェックするのであれば、EnableClientScript=Trueでも大丈夫だと思います。
</憶測>
# 憶測ですみません。
tokyo_eye
会議室デビュー日: 2003/09/11
投稿数: 12
投稿日時: 2003-12-10 22:50
あ,そうですよね!
早速ご指摘のとおりやってみたところうまく動作しました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)