ASP.NET "stacked" 正则表达式字段验证器
ASP.NET "stacked" regular expression field validators
我有 2 个 ASP.NET 正则表达式验证器:
^\s*[-+.'\w]+@\w+(?:[-.]\w+)*\.(?!co\s*$)\w{2,}\s*$
检查邮箱地址是否有效
@(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,但后来我不知道哪个失败了,也不知道要显示哪个错误。
我期望的是:
- “35435gd”-> 电子邮件无效
- "john@adres.pl" -> 不允许
- "john@gmail.com" -> 所有验证器都正常
或者验证器 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.pl
或vp.pl
的部分可以写成@(?!(?:adres|vp)\.pl\b)
不包括直接在@之后的那些匹配项。
如果这是电子邮件地址的最后一部分,您也可以使用 @(?!(?:adres|vp)\.pl\s*$)
,就像您目前对这部分所做的那样 \.(?!co\s*$)
看到一个regex demo.
请注意 您的模式将允许 e-mail 地址的前导和尾随空白字符。
我有 2 个 ASP.NET 正则表达式验证器:
^\s*[-+.'\w]+@\w+(?:[-.]\w+)*\.(?!co\s*$)\w{2,}\s*$
检查邮箱地址是否有效@(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,但后来我不知道哪个失败了,也不知道要显示哪个错误。
我期望的是:
- “35435gd”-> 电子邮件无效
- "john@adres.pl" -> 不允许
- "john@gmail.com" -> 所有验证器都正常
或者验证器 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.pl
或vp.pl
的部分可以写成@(?!(?:adres|vp)\.pl\b)
不包括直接在@之后的那些匹配项。
如果这是电子邮件地址的最后一部分,您也可以使用 @(?!(?:adres|vp)\.pl\s*$)
,就像您目前对这部分所做的那样 \.(?!co\s*$)
看到一个regex demo.
请注意 您的模式将允许 e-mail 地址的前导和尾随空白字符。