由于表达式中的 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
替换它并验证我也需要的字符串部分。
我有以下正则表达式,用于获取特定域名和电子邮件地址类型:
(?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
替换它并验证我也需要的字符串部分。