175

我在验证电子邮件时遇到了一些问题。

在我的模型中:

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

在我看来:

<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)

现在,当您将字段留空时,它会正确显示“字段不能为空”。但是,当您填写无效的电子邮件地址时,例如:“fwenrjfw”,表格不会显示“电子邮件无效”。

如何获取表单以验证输入是否为电子邮件地址?我正在寻求一些帮助。

4

10 回答 10

353

如果您使用的是 .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; }
于 2013-09-21T22:59:21.290 回答
40

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

于 2013-08-16T21:30:06.023 回答
34

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

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

并且不要删除[Required],因为[RegularExpression]不会影响空字段。

于 2013-05-23T11:07:07.373 回答
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";
    }
}

然后你可以这样做:

    public class ContactEmailAddressDto
    {
        public int ContactId { get; set; }
        [Required]
        [Display(Name = "New Email Address")]
        [EmailAnnotation] //**<----- Nifty.**
        public string EmailAddressToAdd { get; set; }
    }
于 2015-06-12T22:41:33.530 回答
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; }

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

于 2013-08-16T22:36:41.530 回答
7
[Required(ErrorMessage = "Please enter Social Email id")]
    [DataType(DataType.EmailAddress)]
    [EmailAddress]
    public string Email { get; set; }
于 2018-10-24T11:34:19.897 回答
4

在 MVC5 项目中使用了上面的代码,它在验证错误的情况下完全可以正常工作。试试这个代码:

   [Required]
   [Display(Name = "Email")]
   [EmailAddress]

   [RegularExpression(@"^([A-Za-z0-9][^'!&\\#*$%^?<>()+=:;`~\[\]{}|/,₹€@ ][a-zA-z0- 
    9-._][^!&\\#*$%^?<>()+=:;`~\[\]{}|/,₹€@ ]*\@[a-zA-Z0-9][^!&@\\#*$%^?<> 
        ()+=':;~`.\[\]{}|/,₹€ ]*\.[a-zA-Z]{2,6})$", ErrorMessage = "Please enter a 
   valid Email")]


   public string ReceiverMail { get; set; }
于 2019-06-06T10:58:11.713 回答
0

根据上述,这将修复电子邮件地址的服务器端验证:

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

然而...

如果您使用的是 JQuery 客户端验证,您应该知道电子邮件验证服务器端(模型验证)和客户端(JQuery 验证)的方式不同。在那个 test@example (顶级域电子邮件地址)中,服务器端会失败,但在客户端会很好地验证。

要解决此差异,您可以覆盖默认的客户端电子邮件验证,如下所示:

$.validator.methods.email = function (value, element) {
    return this.optional(element) || /^[a-z0-9._]+@[a-z]+\.[a-z.]+/.test(value);
}
于 2020-06-29T12:05:12.880 回答
0
[RegularExpression(@"^[A-Za-z0-9]+@([a-zA-Z]+\\.)+[a-zA-Z]{2,6}]&")]
于 2020-09-22T12:57:37.090 回答
0

脚本通常加载在html页面的末尾,MVC推荐使用bundle,就这么说吧。所以我最好的选择是您的jquery.validate文件以某种方式被更改或没有更新到最新版本,因为它们确实验证了电子邮件输入。

所以你可以更新/刷新你的 nuget 包或编写你自己的函数,真的。

这是一个示例,您将在之后添加一个额外的文件jquery.validate.unobtrusive

$.validator.addMethod(
    "email",
    function (value, element) {
        return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );
    },
    "This e-mail is not valid"
);

这只是当前正则jquery.validate表达式的复制和粘贴,但这样您可以设置自定义错误消息/向您可能希望在不久的将来验证的字段添加额外的方法。

于 2018-01-18T11:03:31.903 回答