ASP.NET "stacked" 正则表达式字段验证器

ASP.NET "stacked" regular expression field validators

我有 2 个 ASP.NET 正则表达式验证器:

  1. ^\s*[-+.'\w]+@\w+(?:[-.]\w+)*\.(?!co\s*$)\w{2,}\s*$检查邮箱地址是否有效
  2. @(adres.pl|vp.pl) 检查值是否包含这些字符串中的任何一个

现在的问题是: 不应允许上面第 2 点中的字符串,因此不应允许电子邮件地址“john@adres.pl”。

但是,验证器只是肯定的,这意味着它们会检查它们是否确实包含该结构。 因此,当当前有人输入“test@test.com”时,我得到“无效值”

我的代码如下:

<asp:TextBox ID="tbEmail" runat="server" />
<asp:RegularExpressionValidator ControlToValidate="tbEmail" ErrorMessage="emailinvalid" ValidationExpression="^\s*[-+.'\w]+@\w+(?:[-.]\w+)*\.(?!co\s*$)\w{2,}\s*$" ID="rev1" runat="server"/>
<asp:RegularExpressionValidator ControlToValidate="tbEmail" ErrorMessage="not allowed" ValidationExpression="@(adres.pl|vp.pl)" ID="rev2" runat="server"/>

我最初想结合表达式 1 和 2,但后来我不知道哪个失败了,也不知道要显示哪个错误。

我期望的是:

或者验证器 rev2 应该只在 rev1 不抛出错误时才执行,所以“堆叠”是因为没有更好的术语,a: 看起来很麻烦 b: 我不会不知道怎么做。

我该如何解决这个问题?

更新 1

<asp:RegularExpressionValidator ControlToValidate="tbEmail" ErrorMessage="invalid" ValidationExpression="^\s*[-+.'\w]+@(?!(?:adres|vp)\.pl\b)\w+(?:[-.]\w+)*\.(?!co\s*$)\w{2,}\s*$" ID="RegularExpressionValidator5" runat="server"/>
<asp:RegularExpressionValidator ControlToValidate="tbEmail" ErrorMessage="not allowed" ValidationExpression="@(?!(?:adres|vp)\.pl\b)" ID="RegularExpressionValidator4" runat="server"/>

“gddg”导致“不允许”,而我期望“无效”。

当我切换这些验证器的顺序时,显示“无效”和“不允许”两个错误。

<asp:RegularExpressionValidator ControlToValidate="tbEmail" ErrorMessage="invalid" ValidationExpression="^\s*[-+.'\w]+@(?!(?:adres|vp)\.pl\b)\w+(?:[-.]\w+)*\.(?!co\s*$)\w{2,}\s*$" ID="RegularExpressionValidator5" runat="server"/>
<asp:RegularExpressionValidator ControlToValidate="tbEmail" ErrorMessage="not allowed" ValidationExpression="@(?!(?:adres|vp)\.pl\b)" ID="RegularExpressionValidator4" runat="server"/>

您可以使用单一模式,您可以将现有模式写为:

^\s*[-+.'\w]+@(?!(?:adres|vp)\.pl\b)\w+(?:[-.]\w+)*\.(?!co\s*$)\w{2,}\s*$

不包括adres.plvp.pl的部分可以写成@(?!(?:adres|vp)\.pl\b)不包括直接在@之后的那些匹配项。

如果这是电子邮件地址的最后一部分,您也可以使用 @(?!(?:adres|vp)\.pl\s*$),就像您目前对这部分所做的那样 \.(?!co\s*$)

看到一个regex demo.

请注意 您的模式将允许 e-mail 地址的前导和尾随空白字符。