開箱即用,.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
}
現在,您可以裝飾這個新的擴展屬性的任何字符串屬性驗證分隔的電子郵件地址。您可以更新分隔符以包含您想要使用的任何特殊字符。
希望這會有所幫助!
什麼問題? – Overmachine