web-dev-qa-db-ja.com

ASP.NET MVCデータ型属性を使用した電子メールアドレスの検証

Eメールの検証に問題があります。

私のモデルでは:

[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"のように無効なEメールアドレスを入力すると、フォームには "E-mail is not valid"と表示されません。

入力を電子メールアドレスとして検証するためのフォームを取得する方法を教えてください。私はこれでいくつかの助けを探しています。

148
Java Afca

.NET Framework 4.5を使用している場合、解決策はSystem.ComponentModel.DataAnnotations内にあるEmailAddressAttributeを使用することです。

あなたのコードは次のようになります。

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

Html.EditorForの代わりにHtml.TextBoxForヘルパーメソッドを試してください。

38
hazimdikenli

次のようなRegularExpression属性を使う必要があります。

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

[RegularExpression]は空のフィールドには影響しないため、[Required]を削除しないでください。

19
Alexander Imra

.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; }
    }
14
mcfea

私はMVC 3を使用しています。私のクラスの1つにあるemailアドレスプロパティの例は次のとおりです。

[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レベルまでの電子メールアドレス内のすべてのオプションを網羅しています(非常に長いです)。

10
Peter Smith
[Required(ErrorMessage = "Please enter Social Email id")]
    [DataType(DataType.EmailAddress)]
    [EmailAddress]
    public string Email { get; set; }
4

スクリプトは通常htmlページの最後にロードされます、そしてMVCはちょうど言って、バンドルの使用を推奨します。だから私の最善の策は、あなたの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 Regexのコピー&ペーストにすぎませんが、この方法でカスタムエラーメッセージを設定したり、近い将来検証するフィールドに追加のメソッドを追加したりすることができます。

0
Tiramonium

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; }
0
Kalyani Rathore