C# MVC 4 应用程序中的电子邮件地址验证:使用或不使用正则表达式 [重复]

Posted

技术标签:

【中文标题】C# MVC 4 应用程序中的电子邮件地址验证:使用或不使用正则表达式 [重复]【英文标题】:Email address validation in C# MVC 4 application: with or without using Regex [duplicate] 【发布时间】:2013-12-22 10:12:01 【问题描述】:

我有一个 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 应用程序需要更多标准的电子邮件验证。我该怎么做?

【问题讨论】:

【参考方案1】:

为此,您需要一个正则表达式。看here。如果您使用的是 .net Framework4.5,那么您也可以使用this。因为它是在 .net Framework 4.5 中构建的。 示例

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

【讨论】:

我已经使用了 [DataType(DataType.EmailAdress)] 属性和字符串长度属性,但是我看到我忘记放置 [EmailAdress] 属性了。现在验证很好。谢谢 这将只验证@【参考方案2】:

扩展至Ehsan's Answer....

如果您使用的是 .Net framework 4.5,那么您可以有一个简单的方法来使用代码中的 EmailAddressAttribute Class 验证电子邮件地址。

private static bool IsValidEmailAddress(string emailAddress)

    return new System.ComponentModel.DataAnnotations
                        .EmailAddressAttribute()
                        .IsValid(emailAddress);

如果您正在考虑使用 REGEX 来验证电子邮件地址,请阅读:

I Knew How To Validate An Email Address Until I Read The RFCPhil Haack

【讨论】:

奇怪的是,电子邮件末尾的尾随句点通过了验证。 @TTT,您找到验证尾随周期案例的方法了吗? @user2866746 - 这是因为域名的尾随句点有效,所以我就留下了。它应该解决得很好。 但在我的情况下,我看到电子邮件没有发送到包含尾随句点的电子邮件地址。 其中一位最终用户输入(例如:abc@mailinator.com.)已由模型活页夹正确验证,但问题是,电子邮件无法发送到此地址,并显示A valid address is required. 【参考方案3】:

正则表达式:

[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; 

【讨论】:

我会使用两者的组合。显然 a@a 是一个有效的电子邮件,或者至少它通过了 EmailAddress 属性验证。【参考方案4】:

为什么不直接使用EmailAttribute

[Email(ErrorMessage = "Bad email")]
public string Email  get; set; 

【讨论】:

EmailAttribute 是在哪里定义的?【参考方案5】:

不要。

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

可以使用正则表达式验证电子邮件地址,但它是一个长正则表达式。 Very long. 到头来你也不会更聪明。您只会知道 格式 是有效的,但您仍然不知道它是否是一个活动的电子邮件地址。找出答案的唯一方法是发送一封确认电子邮件。

【讨论】:

确认邮件是我做不到的。我只需要在列表中添加一些电子邮件,以便稍后使用服务报告工具进行操作。问题解决了,虽然时间很长;]【参考方案6】:

validating an email address 的问题不断出现在 SO 上,令人惊讶!

您可以在此处找到一个经常提到的实用解决方案:How to Find or Validate an Email Address。

摘录:

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

请参阅this answer on SO,了解上述链接中文章优点的讨论。特别是,日期为 2012-04-17 的评论内容如下:

致所有抱怨者:经过 3 小时试验所有解决方案 在这个巨大的讨论中提供,这是唯一好的 Java 正则表达式 我能找到的解决方案。 rfc5322 的任何东西都不适用于 java 正则表达式。

【讨论】:

我是否应该再次回答我不需要基本验证并且我正在寻找一种在 MVC4 应用程序中验证电子邮件的方法。正如所指出的还有其他方法:使用我忘记添加的属性.我已经使用了给定的示例,但是使用该正则表达式的电子邮件验证为我的案例传递了错误的电子邮件格式。

以上是关于C# MVC 4 应用程序中的电子邮件地址验证:使用或不使用正则表达式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在接受多个电子邮件地址的字段上实现 MVC 不显眼的验证

MVC 远程验证(唯一的电子邮件地址)

从 Twitter API 获取用户的电子邮件以进行外部登录身份验证 ASP.NET MVC C#

Java / Spring MVC 3 验证电子邮件地址

从 ASP.NET MVC 5 中的 Facebook v2.4 API 访问 OAuth ExternalLoginCallback 中的电子邮件地址 [重复]

如何在 Swift 4 中更新 Firebase 身份验证中的电子邮件地址