ASP.NET电子邮件验证器正则表达式

44

有人知道 ASP.NET 中电子邮件验证器使用的正则表达式是什么吗?


我认为没有内置的“EmailValidator”控件可供使用。您可以使用RegularExpressionValidator自己创建。 - Dave Baghdanov
不是回答问题的方法,但这里是我使用的简单验证:.+@.+\..+。我坚持使用它,因为许多电子邮件不遵循标准,但它们仍然有效。 - LCJ
6个回答

102

以下是使用 .NET 中的 RegularExpressionValidator 验证互联网邮件地址的正则表达式:

\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

顺便提一下,如果在页面上放置一个RegularExpressionValidator,并进入设计视图,那么会出现一个ValidationExpression字段,您可以使用该字段从.NET提供的表达式列表中进行选择。 一旦选择所需的表达式,就会有一个包含验证器使用的正则表达式的Validation expression:文本框。


2
这就是 ASP.NET 的电子邮件验证器吗?它只匹配 "@._" 这样的格式... 我原以为会有更高级的验证方式。 - Bart Kiers
6
在我看来,验证电子邮件地址只是浪费时间。 - Bart Kiers
12
在表单中验证电子邮件地址从来不是浪费时间。您仍然可以将其与其他检查结合使用。 - IrishChieftain
6
@BartKiers 这正是应该做的方式。验证电子邮件的正确方法是查找@和其后面的点,两者之间应该有一些东西。关于此主题的好文章 - http://jacobsantos.com/2007/general/stop-doing-email-validation-the-wrong-way/ - Stilgar
4
常见误解是客户端电子邮件验证旨在防止恶意用户输入垃圾邮件 - 实际上不是。其目的只是为了帮助用户输入电子邮件地址。我不知道有多少次我打得太快,忘记在域名和顶级域名之间加点。 - The Muffin Man
显示剩余7条评论

24

我不再验证电子邮件地址的格式(但是我会检查确保有@符号和之后有一个句点)。这样做的原因是,即使按照正确的格式输入电子邮件地址,也无法保证该地址是否有效。您应该向其发送电子邮件并要求他们点击链接或验证代码。这是验证电子邮件地址是否有效以及确认接收方是否能够接收电子邮件的唯一真正方法。


19
电子邮件地址验证并不是为了防止用户输入不属于他们的地址,其目的是防止用户意外地输错地址。因此,基本上你说的是你不能完全防止人们闯入你的房子,所以与其锁门,保持关着就足够了。 - The Muffin Man
你可以提供一个简单的验证示例,使用 @.(或参考 https://dev59.com/h3RB5IYBdhLWcg3wCjcV) - LCJ
2
你需要两者兼备。在你确认这是一个有效的电子邮件之前,不应该浪费时间发送电子邮件。 - capdragon

18

电子邮件地址仅使用正则表达式验证是非常困难的。 这里 是一个相当可怕的正则表达式,据说实现了 RFC822第6章 的规范,即有效的电子邮件地址的规范。

这并不是一个答案,但可能与您试图完成的任务有关。


2
那个正则表达式太棒了。 - The Muffin Man

17
我们可以使用RegularExpressionValidator来验证电子邮件地址格式。您需要在RegularExpressionValidator的ValidationExpression属性中指定正则表达式。因此,它看起来像这样:
 <asp:RegularExpressionValidator ID="validateEmail"    
  runat="server" ErrorMessage="Invalid email."
  ControlToValidate="txtEmail" 
  ValidationExpression="^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$" />

在按钮或链接的事件处理程序中,您需要检查!Page.IsValid。 在此处检查示例代码:sample code 另外,如果您不想使用RegularExpressionValidator,则可以编写简单的验证方法,并在该方法中使用System.Text.RegularExpressions命名空间的RegEx类。
检查示例: example

请勿提供错误地将有效电子邮件识别为无效的解决方案,与此正则表达式进行比较:http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html 您应该添加一个警告,说明这个解决方案过于简单。 - oligofren

4

对于正则表达式,我首先查看这个网站:RegExLib.com


2

除了使用验证器进行客户端验证,我还建议进行服务器端验证。

bool isValidEmail(string input)
{
    try
    {
        var email = new System.Net.Mail.MailAddress(input);
        return true;
    }
    catch
    {
        return false;
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接