RegEx在放入ValidationExpression时停止工作

时间:2014-02-06 14:01:29

标签: asp.net regex

我有一个文本框,用户可以在其中输入他们的电子邮件地址。我需要阻止人们使用某些电子邮件地址,因为这是为了企业(B2B)使用。

任何人都可以帮我处理RegEx,如果电子邮件地址包含@gmail或@yahoo会返回false吗?

到目前为止,我有这个(感谢@Sabuj)@(yahoo|gmail)\.但是当放入RegularExpressionValidator时它不起作用:

<asp:RegularExpressionValidator ValidationExpression='@(yahoo|gmail)\.' runat="server" ControlToValidate="txt_email" />

阅读MSDN以获取更多信息后,我也尝试了这一点,但无论输入内容如何,​​它仍然会返回true:

<asp:RegularExpressionValidator ValidationExpression='^(@(yahoo|gmail)\.)$' runat="server" ControlToValidate="txt_email"  />

4 个答案:

答案 0 :(得分:2)

使用此:

<asp:RegularExpressionValidator ValidationExpression=".*@(?!(yahoo|gmail)).*" ControlToValidate="txt_email" runat="server" ErrorMessage="Yahoo and Gmail disallowed"></asp:RegularExpressionValidator>

验证表达式属性应设置为与整个字符串匹配。

但我的正则表达式.*@(?!(yahoo|gmail)).*与整个电子邮件相匹配。所以它有效:)

您不需要^$,因为字符串将是一行。

另外,请不要忘记将type="email"添加到txt_email。它会自动处理是否是有效的电子邮件。

如果出现错误消息,则它无效,但如果没有出现,那么它绝对有效。

答案 1 :(得分:1)

您可以使用此正则表达式检查上述电子邮件是否包含:

@(gmail|yahoo|mailinator|guerrillamail|dispostable)\.

答案 2 :(得分:1)

由于电子邮件地址的语法复杂(比大多数人认为的更复杂,例如,它们可以包含注释[RFC822§3.4.3]),我建议不要使用正则表达式。相反,使用“适当的”电子邮件解析器,然后向解析器询问地址的域部分。

答案 3 :(得分:1)

我想出了^.*@(?!(yahoo|gmail)).*$

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" ValidationExpression="^.*@(?!(yahoo|gmail)).*$" runat="server" ControlToValidate="txt_email" Text="No free email accounts allowed" />

这将允许任何文本传递包含@yahoo@gmail的验证程序。

不要忘记在后面的代码中查看Page.IsValid,并在<asp:ValidationSummary runat="server" />中添加.aspx