无法使asp:RegularExpressionValidator起作用

4

我希望你能帮忙翻译一下关于IT技术的内容。以下是需要更新的一个asp页面中,我无法让正则表达式字段验证器工作起来的问题:

这是一个简化了重要部分的asp面板:

<asp:Panel ID="pnlEmailAddressCollection" runat="server">
    <div id="POMInput-wrapper">
        <div class="POMInput-FieldText">
            <span class="POMInput-wrapper-text">Name:</span>

            <br />
            <span class="POMInput-wrapper-text">Email Address:</span>

            <br />
        </div>
        <div class="POMInput-FieldEntry">
            <asp:TextBox ID="txtEmailAddress" name="emailAddress" runat="server" CssClass="textInput"></asp:TextBox>
            <asp:TextBox ID="txtUserName" runat="server" name="firstName" CssClass="textInput"></asp:TextBox>
        </div>

        <asp:RequiredFieldValidator ID="rfvNameValidator"  runat="server" 
            ErrorMessage="Please enter your name"
            ControlToValidate="txtUserName" 
            Display="None" />

        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
            ErrorMessage="Please enter your email address"
            ControlToValidate="txtEmailAddress" 
            Display="None" />

        <asp:RegularExpressionValidator ID="rfvEmailValidator2" runat="server" 
            ErrorMessage="Please enter a valid email address" 
            ControlToValidate="txtEmailAddress"
            Display="None"
            ValidationExpression="^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$" />

        <asp:ValidationSummary ID="ValidationSummary1" runat="server"
            ShowMessageBox="true" 
            ShowSummary="false"
            EnableClientScript="true" />                        
    </div>
</asp:Panel>

目前无论我输入哪个电子邮件地址,都无法通过验证。asp:RequiredFieldValidator按预期工作。

我在一个测试项目中测试了正则表达式,正则表达式似乎是正确的(对有效的电子邮件返回true,对无效的电子邮件返回false)。我是否错误地设置了asp:RegularExpressionValidator?


2
其他验证是否有效? - Karthik
你尝试过暂时使用一个更简单、平凡的正则表达式来测试吗?你需要弄清楚是你的表达式有问题还是验证器的连接有误。 - n8wrl
尝试使用此正则表达式 *\w+([-+.']\w+)@\w+([-.]\w+)*.\w+([-.]\w+)***。 - Kundan Singh Chouhan
@n8wrl 好的," .* "通过了验证。我猜它不喜欢表达式的一部分。你需要对表达式进行URL编码吗? - Mike Corcoran
好的,看了一下文档,它说使用“jscript正则表达式”语法...我得看看我上面的表达式是否符合该语法。 - Mike Corcoran
显示剩余3条评论
3个回答

1

你应该删除双斜杠:

ValidationExpression="^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$" 

请注意,您在本意只需要输入一个反斜杠时却输入了两个。如果您是从代码后台设置此表达式,则提供的字符串是正确的。但在aspx中,您不必转义反斜杠。
目前接受的电子邮件地址应该类似于abc@abc{反斜杠}.com。

这也不起作用。我在想我的标记中是否还有其他东西搞砸了它... - Mike Corcoran
我将您的验证器标记复制粘贴到我的项目中,将其连接到第一个随机文本框控件,并按照您的意图正常工作(同时纠正了上述双反斜杠问题)。因此,如果您说其他验证器对您有效,则可能存在某些问题 :) - Maku
我最终只是将其转换为标准表单字段和JavaScript验证。页面中有太多其他的标记,试图缩小问题所在的范围太麻烦了 - 我可能会在某个时候重新审视它。这是以前开发人员遗留下来的一些旧页面。 - Mike Corcoran

0
你可以尝试使用这段代码。
ValidationExpression="[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}" 

注意:您可以删除 ^ 和 $ 符号


0

正则表达式在.NET(服务器端)中有效,但由于客户端JScript实现而失败,如“备注”部分所述。要验证这一点(它通过了服务器端验证),请将验证器上的EnableClientScript属性设置为false。

然后撤消该更改并验证正则表达式是否在客户端通过。如果您觉得更容易,可以使用在线测试工具


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接