3

MVC3を使用しています。

ユーザーが複数のメール アドレスを入力できるテキスト領域があります。電子メールはコンマとスペースで区切ることができます。ユーザーはボックス内で Enter キーを押すこともできます。

  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

4

2 に答える 2

8

すぐに使用できる .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

}

この新しい拡張属性を使用して任意の文字列プロパティを修飾し、区切りメール アドレスを検証できるようになりました。区切り文字を更新して、使用したい特殊文字も含めることができます。

お役に立てれば!

于 2014-03-05T18:41:38.580 に答える