すぐに使用できる .NET 4.5 には、System.ComponentModel.DataAnnotations アセンブリに含まれる System.ComponentModel.DataAnnotations.EmailAddressAttribute がありますが、これは 1 つの電子メール アドレスのみの検証に限定されます。したがって、区切り付きの電子メール アドレスを受け入れるモデルがあり、この属性でプロパティを装飾すると、文字列全体が 1 つの電子メールとして扱われるため、失敗します。
私が行ったことは、区切られた電子メールアドレスを検証する拡張された電子メールアドレス属性を作成することです:
[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
}
この新しい拡張属性を使用して任意の文字列プロパティを修飾し、区切りメール アドレスを検証できるようになりました。区切り文字を更新して、使用したい特殊文字も含めることができます。
お役に立てれば!