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-]+

这应该很简单,并清除最明显的问题,而不会太挑剔。

Anywho,给定输入 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 回答