使用ASP.NET MVC数据类型属性验证电子邮件地址

Jav*_*fca 157 c# validation asp.net-mvc email-validation

我在验证电子邮件方面遇到了一些问题.

在我的模型中:

[Required(ErrorMessage = "Field can't be empty")]
[DataType(DataType.EmailAddress, ErrorMessage = "E-mail is not valid")]
public string ReceiverMail { get; set; }
Run Code Online (Sandbox Code Playgroud)

在我看来:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@Html.TextBoxFor(m => m.ReceiverMail, new { @placeholder="E-mail"}) <br />
@Html.ValidationMessageFor(m => m.ReceiverMail)
Run Code Online (Sandbox Code Playgroud)

现在,当你将场留空时,它正确地向我显示"场不能为空".但是当你填写一个无效的电子邮件地址,如:"fwenrjfw",那么表格并没有说"电子邮件无效".

如何获取表单以将输入验证为电子邮件地址?我正在寻找一些帮助.

Shi*_*nga 314

如果您使用的是.NET Framework 4.5,那么解决方案就是使用EmailAddressAttribute内部的解决方案System.ComponentModel.DataAnnotations.

您的代码应该类似于:

[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
Run Code Online (Sandbox Code Playgroud)

  • @Wellington Zanelli - DataType(DataType.EmailAddress)不能用于验证用户输入.它仅用于提供UI提示,以使用显示/编辑器模板呈现值. (14认同)
  • EmailAddressAttribute如何工作? (7认同)
  • @Jni`DataType.EmailAddress`与验证无关.这是关于数据展示...... (3认同)
  • 我有同样的问题,对我来说,电子邮件验证工作正常,除了'name @ xxx'之类的电子邮件.有没有人见过这个? (3认同)
  • @KremenaLalova`name @ xxx`是一个完全有效的电子邮件地址,因此该方法没有任何问题。例如,考虑示例“ username @ localhost”。 (2认同)

haz*_*nli 38

尝试Html.EditorFor帮助方法而不是Html.TextBoxFor.

  • myname @无论是有效的电子邮件地址 (8认同)
  • 这个方法不检查域tld,所以有人可以放入myname @ whatever并省略.com,它将正确验证 (4认同)

小智 23

您需要使用RegularExpression属性,如下所示:

[RegularExpression("^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$", ErrorMessage = "E-mail is not valid")]
Run Code Online (Sandbox Code Playgroud)

并且不要删除[必需],因为[RegularExpression]不会影响空字段.

  • 这个正则表达式和网站是错误的.有超过6个字符的新TLD.不要跟这个. (9认同)
  • 旧的skool很不错,但是由于Microsoft实现了一个属性,它可以解决在某些情况下,国家,时区或行星中可能发生的错误和疏忽.因此最好使用完全发布的代码库而不是自定义正则表达式.例如,您的正则表达式是否考虑了新的顶级域名? (8认同)
  • 对于任何包含外来字符或许多非标准字符的电子邮件地址,该正则表达式看起来都会失败. (2认同)
  • 使用正则表达式验证电子邮件地址通常是一个糟糕的想法...但如果必须,这里有一个很好的参考.. http://www.regular-expressions.info/email.html (2认同)

mcf*_*fea 14

如果你还没有使用.net 4.5:

/// <summary>
/// TODO: AFTER WE UPGRADE TO .NET 4.5 THIS WILL NO LONGER BE NECESSARY.
/// </summary>
public class EmailAnnotation : RegularExpressionAttribute
{
    static EmailAnnotation()
    {
        DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(EmailAnnotation), typeof(RegularExpressionAttributeAdapter));
    }

    /// <summary>
    /// from: http://stackoverflow.com/a/6893571/984463
    /// </summary>
    public EmailAnnotation()
        : base(@"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"
            + "@"
            + @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$") { }

    public override string FormatErrorMessage(string name)
    {
        return "E-mail is not valid";
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

    public class ContactEmailAddressDto
    {
        public int ContactId { get; set; }
        [Required]
        [Display(Name = "New Email Address")]
        [EmailAnnotation] //**<----- Nifty.**
        public string EmailAddressToAdd { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)


Pet*_*ith 10

我使用MVC 3.我的一个类中的电子邮件地址属性的示例是:

[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[Email(ErrorMessage = "The email address is not valid")]
public string Email { get; set; }
Run Code Online (Sandbox Code Playgroud)

Required如果输入是可选的,则删除.不需要正则表达式,尽管我有一个涵盖了电子邮件地址中达到RFC 2822级别的所有选项(它很长).

  • MVC 4使用`[EmailAddress]`,你需要使用System.ComponentModel.DataAnnotations; ` (5认同)
  • 对于.net 4.5而不是4.0 (5认同)
  • 您的电子邮件属性在哪个命名空间?或者它是自定义属性? (3认同)

小智 7

[Required(ErrorMessage = "Please enter Social Email id")]
    [DataType(DataType.EmailAddress)]
    [EmailAddress]
    public string Email { get; set; }
Run Code Online (Sandbox Code Playgroud)


小智 5

在 MVC5 项目中使用上述代码,它工作完全正常,但存在验证错误。只需尝试以下代码:

\n
   [Required]\n   [Display(Name = "Email")]\n   [EmailAddress]\n\n   [RegularExpression(@"^([A-Za-z0-9][^'!&\\\\#*$%^?<>()+=:;`~\\[\\]{}|/,\xe2\x82\xb9\xe2\x82\xac@ ][a-zA-z0- \n    9-._][^!&\\\\#*$%^?<>()+=:;`~\\[\\]{}|/,\xe2\x82\xb9\xe2\x82\xac@ ]*\\@[a-zA-Z0-9][^!&@\\\\#*$%^?<> \n        ()+=':;~`.\\[\\]{}|/,\xe2\x82\xb9\xe2\x82\xac ]*\\.[a-zA-Z]{2,6})$", ErrorMessage = "Please enter a \n   valid Email")]\n\n\n   public string ReceiverMail { get; set; }\n
Run Code Online (Sandbox Code Playgroud)\n

  • 欢迎来到 StackOverflow。仅代码答案不被认为是一个好的做法。请详细说明它的作用以及它如何解决问题。 (2认同)