2012-05-02 7 views
1

私は同じことを期待しているので、ここで何かが間違っていると確信しています。RegularExpressionValidatorとCustomValidatorのRegex.Match

web.configファイルに保持された発現が

ことになっている
[\w-][email protected]([\w-]+\.)+[\w-]+ 

ある次RegularExpressionValidator構文

<asp:RegularExpressionValidator runat="server" ID="rxEmail" ControlToValidate="txEmail" 
        ValidationExpression="<%$ appsettings:rxEmail %>" Text="*" /> 

、次のCustomValidator構文/コード

<asp:CustomValidator ID="cvEmail" runat="server" Text="*" onServerValidate="validateContactFormat" /> 

Sub validateContactFormat(ByVal sender As Object, ByVal args As ServerValidateEventArgs) Handles cvContactFormat.ServerValidate 
     Dim emailRegEx As Regex = New Regex(ConfigurationManager.AppSettings("rxEmail")) 
     args.IsValid = emailRegEx.IsMatch(txEmail.Text) 

End Sub 

を仮定シンプルで、最も明白な問題を除外し、あまりにも写真ではなくky。

入力が[email protected]の場合、RegularExpressionValidatorは失敗しますが、CustomValidatorは失敗します。他のシナリオは期待どおりに動作します..両方とも[email protected]を渡しますが、blah.comは失敗します。他にも問題があるかもしれませんが、これは私が気づいたものです。

私はCustomValidatorのコードがRegularExpressionValidatorが '舞台裏で'作り出すものと同じではないと思っていますが、正確に何が違うのですか?

多くの感謝!

答えて

1
[email protected] 

には、@の前にドットが含まれています。そのドットは[\w-]+と一致しません。

RegularExpressionValidatorは、正規表現に対して文字列全体の文字列をチェックし、正しく失敗します。

のCustomValidator サブ一致するかどうかを確認する(Regex.IsMatch()を使用)(および正しく再び、[email protected]で成功)。

、両方が同じように動作することを確認してアンカーを使用して正規表現を囲むように:

"^(?:" + myOldRegex + ")$" 
+0

素晴らしい答え:)感謝 –

+0

@TablooQuijico:どういたしまして、あなたがすべき最初のものじゃありません'Search()'や 'Find()'や 'IsSubmatch()'の代わりに 'IsMatch()'メソッドの名前をつけるという.NETチームの決定や、完全一致を意味するものではない。 –

関連する問題