DataAnnotation TextArea 多封电子邮件

lea*_*... 3 regex data-annotations asp.net-mvc-3

我正在使用 MVC 3。

我有一个文本区域,用户可以在其中输入多个电子邮件地址。电子邮件可以用逗号和空格分隔。用户也可以在框中按回车键。

  1. 是否有可以处理这种情况的属性?

  2. 我正在使用正则表达式来检查字符,但“abc@abc.com, tyz@tyz.com”失败

这是我的正则表达式: [RegularExpression(@"([a-zA-Z0-9 .@-_\n\t\r]+)", ErrorMessage = ValidationMessageConstants.EmailAdressInvalid)]

我在这里缺少什么?这个正则表达式来自以下帖子: DataAnnotations validation (Regular Expression) in asp.net mvc 4 - razor view

UT-*_*-05 7

开箱即用,.NET 4.5 在 System.ComponentModel.DataAnnotations 程序集中有 System.ComponentModel.DataAnnotations.EmailAddressAttribute,但这仅限于验证一个电子邮件地址。因此,如果您有一个接受分隔电子邮件地址的模型并且您使用此属性装饰该属性,它将失败,因为它将整个字符串视为一封电子邮件。

我所做的是创建一个扩展的 emailaddress 属性来验证分隔的电子邮件地址:

    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class EmailAddressExAttribute : DataTypeAttribute
{
    #region privates
    private readonly EmailAddressAttribute _emailAddressAttribute = new EmailAddressAttribute();
    #endregion

    #region ctor
    public EmailAddressExAttribute() : base(DataType.EmailAddress){ }
    #endregion

    #region Overrides
    /// <summary>
    /// Checks if the value is valid
    /// </summary>
    /// <param name="value"></param>
    /// <returns></returns>
    public override bool IsValid(object value)
    {
        var emailAddr = Convert.ToString(value);
        if (string.IsNullOrWhiteSpace(emailAddr)) return false;

        //lets test for mulitple email addresses
        var emails = emailAddr.Split(new[] {';', ' ', ','}, StringSplitOptions.RemoveEmptyEntries);
        return emails.All(t => _emailAddressAttribute.IsValid(t));
    }
    #endregion

}
Run Code Online (Sandbox Code Playgroud)

您现在可以使用这个新的扩展属性装饰任何字符串属性来验证分隔的电子邮件地址。您可以更新分隔符以包含您想要使用的任何特殊字符。

希望这可以帮助!