C# MVC 4应用中的电子邮件地址验证:使用正则表达式还是不使用?

25

我有一个MVC 4 Web应用程序,需要输入和验证一些电子邮件地址,而不向用户的电子邮件地址发送电子邮件。

目前我正在使用基本的正则表达式电子邮件验证,该模式如下:

[RegularExpression(@"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z",
        ErrorMessage = "Please enter correct email address")]

虽然这段代码可以验证电子邮件地址,但它将1@1.1识别为有效的电子邮件地址。目前我需要一个验证器,需要符号@符号.符号,其中符号可以是数字/字母和._-。

我需要更标准的电子邮件验证器用于我的MVC 4应用程序。我该怎么做?

6个回答

83

您需要一个正则表达式来实现此功能。可以在这里查看。如果您使用的是.NET Framework 4.5,则可以使用这个。因为它是内置于.NET Framework 4.5中的。 例如

[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }

3
我已经使用了[DataType(DataType.EmailAddress)]属性和字符串长度属性,但是我看到我忘记放[EmailAddress]属性了。现在验证很好。谢谢。 - dlght
1
仅限验证 @ 符号 - umeshkumar sohaliya

24

奇怪的是,在电子邮件末尾加上一个句点也能通过验证。 - TTT
@TTT,你找到验证尾随句点的方法了吗? - Ammar Khan
@user2866746 - 这是因为域名后面的句点是有效的,所以我就保留了它。它应该可以正常解析。 - TTT
但是在我的情况下,我发现电子邮件没有发送到包含尾随句点的电子邮件地址。 - Ammar Khan
其中一位终端用户输入了(例如:abc@mailinator.com.),这个地址被模型绑定器正确验证,但问题是,电子邮件无法发送到该地址,并显示“需要一个有效的地址”。 - Ammar Khan

16

正则表达式:

[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "Please enter a valid e-mail adress")]

或者您可以只使用:

    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

2
我最终使用了两者的组合。显然,a@a 是一个有效的电子邮件地址,或者至少它通过了 EmailAddress 属性验证。 - CBC_NS

4
为什么不直接使用EmailAttribute呢?
[Email(ErrorMessage = "Bad email")]
public string Email { get; set; }

EmailAttribute 定义在哪里? - Shaddix

1

不要。

使用正则表达式进行快速的检查,例如.@..,但几乎所有的语言/框架都有更好的方法来检查电子邮件地址。使用它。

使用正则表达式验证电子邮件地址是可能的,但需要一个很长的正则表达式。非常
而且最终你也无法确定是否有效。你只知道格式是正确的,但你仍然不知道它是否是一个有效的电子邮件地址。唯一的方法是发送确认电子邮件。


确认电子邮件是我无法完成的事情。我只需要将一些电子邮件添加到列表中,以便稍后使用服务报告工具进行功能操作。问题已解决,感谢您的时间;] - dlght

0

令人惊讶的是,在SO上,验证电子邮件地址的问题不断出现!

您可以在此找到一个经常提到的实用解决方案如何查找或验证电子邮件地址

摘录:

我的正则表达式的优点是它可以匹配99%的今天使用的电子邮件地址。所有它匹配的电子邮件地址都可以被99%的所有电子邮件软件处理。如果您正在寻找一个快速解决方案,您只需要阅读下一段。如果您想了解所有权衡并获得大量可供选择的替代方案,请继续阅读。

请参见SO上的这个答案,以讨论上述链接文章的优点。特别是,日期为2012-04-17的评论如下:

对于所有的抱怨者:在这个巨大的讨论中尝试了3个小时的所有解决方案后,这是我能找到的唯一好的Java正则表达式解决方案。rfc5322的东西都不适用于Java正则表达式。

我是否需要再次回答我不需要基本验证,而是寻找一种在MVC4应用程序中验证电子邮件的方法。正如指出的那样,还有另一种方式:使用我忘记放置的属性。我已经使用了给定的示例,但使用该正则表达式进行的电子邮件验证仍会将错误的电子邮件格式通过。 - dlght

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