1

私が同じように機能することを期待しているので、私は確かにここで何かを見逃しています。

次の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

web.configに保持されている式は次のとおりです。

[\w-]+@([\w-]+\.)+[\w-]+

これは単純であると考えられており、あまりうるさくならずに、最も明白な問題を取り除きます。

誰でも、入力bob.smith@someplace.co.ukを指定すると、RegularExpressionValidatorは失敗しますが、CustomValidatorは合格します。他のシナリオは期待どおりに機能します。どちらもblah@blah.comに合格しますが、blah.comに失敗します。他にも問題があるかもしれませんが、これは私が気付いた問題です。

CustomValidatorのコードは、RegularExpressionValidatorが「舞台裏で」生成するものと同じではないと思いますが、違いは正確には何で、なぜ私が見ているものを見るのですか?

どうもありがとう!

4

1 に答える 1

1
bob.smith@someplace.co.uk

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

RegularExpressionValidatorは、文字列全体 を正規表現と照合し、正しく失敗します。

CustomValidator(を使用)は、部分文字列Regex.IsMatch()が一致するかどうかをチェックします(そして、再び正しく成功します)。smith@someplace.co.uk

両方が同じように動作することを確認するには、正規表現をアンカーで囲みます。

"^(?:" + myOldRegex + ")$"
于 2012-05-02T11:06:49.970 に答える