由于表达式中的 RegularExpressionValidator 分组问题,FormView 未保存

FormView not saving due to RegularExpressionValidator grouping issue in expression

我有以下正则表达式,用于获取特定域名和电子邮件地址类型:

(?i:^domain\[a-z0-9]+$)
(?i:([;]|^)([a-z0-9.]+@(dom\.net|part1\.part2\.uk))(?=[;]|$))

我在 ASP.NET 页面上的一对 RegularExpressionValidator 控件中使用它们来完成显而易见的事情。

这两个表达式已经过测试(first, second),并且可以正常工作。我什至在 regexstorm 上测试过它们。net/tester,它们在那里也工作得很好,或者更确切地说,它根本没有抱怨。

我试过在文本框中正确和错误地输入数据,但确实产生了预期的结果(即显示和隐藏验证程序消息)。

当我提交更改以保存数据时,但是没有任何反应。

ASP.NET 论坛中的

This thread 告诉我这个问题可能与错误定义的表达式有关。在使用 Chrome 测试并从开发人员工具中提取结果后,果然我确实发现了一个异常列出,引用了一个不正确的组表达式(例如:):

Uncaught SyntaxError: Invalid regular expression: 
    /(?i:([;]|^)([a-z0-9.]+@(dom\.net|part1\.part2\.uk))(?=[;]|$))/: 
Invalid group
at new RegExp (<anonymous>)
at HTMLSpanElement.RegularExpressionValidatorEvaluateIsValid [as evaluationfunction] (ScriptResource.axd?d=nv7asgRUU0tRmHNR2D6t1I81CZYvhDRBNs2fZ336VJmjaWUtfpNHyosZQUxZ0B5WPXmV97rd4uGrASTweyiB-WOW1uyNsuPtZ3w36cKlE-LnO2_rZ0xo0PpdoCQY_z4Id3GA-_iewMRfjN0CNhHZOQ2&t=26028d1e:458)
at ValidatorValidate (ScriptResource.axd?d=nv7asgRUU0tRmHNR2D6t1I81CZYvhDRBNs2fZ336VJmjaWUtfpNHyosZQUxZ0B5WPXmV97rd4uGrASTweyiB-WOW1uyNsuPtZ3w36cKlE-LnO2_rZ0xo0PpdoCQY_z4Id3GA-_iewMRfjN0CNhHZOQ2&t=26028d1e:200)
at ValidatorOnChange (ScriptResource.axd?d=nv7asgRUU0tRmHNR2D6t1I81CZYvhDRBNs2fZ336VJmjaWUtfpNHyosZQUxZ0B5WPXmV97rd4uGrASTweyiB-WOW1uyNsuPtZ3w36cKlE-LnO2_rZ0xo0PpdoCQY_z4Id3GA-_iewMRfjN0CNhHZOQ2&t=26028d1e:162)
at HTMLInputElement.eval (eval at ValidatorHookupEvent (ScriptResource.axd?d=nv7asgRUU0tRmHNR2D6t1I81CZYvhDRBNs2fZ336VJmjaWUtfpNHyosZQUxZ0B5WPXmV97rd4uGrASTweyiB-WOW1uyNsuPtZ3w36cKlE-LnO2_rZ0xo0PpdoCQY_z4Id3GA-_iewMRfjN0CNhHZOQ2&t=26028d1e:90), <anonymous>:3:1)

不幸的是,我对正则表达式的了解还不够,无法弄清楚表达式在哪里崩溃了 - 我真的很感激一些指示。

相关文本框和验证器的 ASP.NET 页面代码...

<asp:Label runat="server" ID="labelDomainUsername" 
    Text="Your domain username..." AssociatedControlID="textDomainUsername" 
    ClientIDMode="Predictable" />
<span class="help">
    This is your Windows login, and usually appears as <strong>DOMAIN\asurname</strong>.
</span>
<asp:TextBox runat="server" ID="textDomainUsername" 
    Text='<%# Bind("domain_username")%>' 
    CssClass="mandatory w2Eighths noBlock" 
    PlaceHolder="DOMAIN\AUsername" TabIndex="0" />
<asp:RegularExpressionValidator runat="server" ID="rexDomainUser"
    ControlToValidate="textDomainUsername" 
    ValidationExpression='<%$ appSettings:rexDomainAccount %>'
    Text="Please supply a valid domain username."
    CssClass="validBalloon" Display="Dynamic" />

<asp:Label runat="server" ID="labelEmail" 
    Text="Your email address..." AssociatedControlID="textEmail" />
<span class="help">
    Your email address can be an <strong>dom.net</strong> or <strong>part1.part2.uk</strong>
    account. If you have a secretary, or wish to include another email address separate them with a 
    semi-colon.
</span>
<asp:TextBox runat="server" ID="textEmail" Text='<%# Bind("email")%>' 
    CssClass="mandatory w3Eighths noBlock" AutoCompleteType="Email" 
    PlaceHolder="any.username@dom.net" TabIndex="1" />
<asp:RegularExpressionValidator runat="server" ID="rexEmail"
    ControlToValidate="textEmail" 
    ValidationExpression='<%$ appSettings:rexEmailAddress %>'
    Text="Please supply a valid email address."
    CssClass="validBalloon" Display="Dynamic" />

如前所述,使用 RegularExpressionValidator 存在一些问题。有多种方法可以解决这个问题,但我所做的就是用 CustomValidator 替换它并验证我也需要的字符串部分。