- PR -

RegularExpressionValidatorクラスとRegexクラスの正規表現による検証結果について

1
投稿者投稿内容
suwa
会議室デビュー日: 2005/08/26
投稿数: 8
投稿日時: 2005-10-07 13:03
こんにちは。

年月を表す「YYYY/MM」形式の文字列を正規表現で検証するために
「^(18|19|20)[0-9]{2}/(0[1-9]{1})|(1[0-2]{1})$」を考えました。
この正規表現が正しいかどうかを調べるため、
WebコントロールのRegularExpressionValidatorクラスと
Regexクラスそれぞれで確かめてみました。

■aspx
<asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:RegularExpressionValidator id="RegularExpressionValidator1" runat="server" ErrorMessage="RegularExpressionValidator"
ValidationExpression="^(18|19|20)[0-9]{2}/(0[1-9]{1})|(1[0-2]{1})$" ControlToValidate="TextBox1" EnableClientScript="False">
</asp:RegularExpressionValidator>

■Button1のClickイベントハンドラ
Regex r = new Regex( RegularExpressionValidator1.ValidationExpression );
bool isValidRegex = r.IsMatch(TextBox1.Text);
bool isValidValidator = RegularExpressionValidator1.IsValid;

上記のコードで、TextBox1に「2005/10」を入力すると
isValidRegexには「True」が、isValidValidatorには「False」がセットされました。

VisualStudio2003のWebコントロールのRegularExpressionValidatorコントロールについて、
MSDNには「サーバーでは、 System.Text.RegularExpressions.Regex 構文を使用します」
と記述されております。
MSDN RegularExpressionValidator クラス

このことから同じ正規表現であれば、
RegularExpressionValidatorコントロールのサーバー側による検証と
Regexクラスによる検証は同じ結果となると認識していましたが、そうではないのでしょうか。

なぜこのようになるのかご存知の方みえましたら、ご教授いただければと思います。
よろしくお願いします。

環境:WindowsXP Pro、VisualStudio2003、ASP.NET C#
1

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