10

jQuery驗證電子郵件地址,可以很方便地驗證電子郵件地址:驗證與非侵入式JavaScript/MVC3和DataAnnotations

$("someForm").validate({ 
    rules: { 
     SomeField: { 
      required: true, 
      email: true, 
      remote: { 
       type: "POST", 
       url: "CheckEmail" 
      } 
     } 
    } 
}); 

這就使SomeField是必需的,必須被格式化爲E-電子郵件地址,並執行遠程調用CheckEmail操作(檢查重複項)。

我喜歡做的事情越簡單越好,所以我可以做很多與數據註釋同樣的東西:

public class RegisterModel { 
    [Required] 
    [Remote("CheckEmail", "Home", HttpMethod="POST")] 
    public string SomeField { get; set; } 
} 

不ASP.net MVC 3 /數據註解有一個內置/簡單驗證以確保電子郵件地址格式正確的方法?

如果可能,我希望它能產生不引人注意的javascript。

回答

9

不ASP.net MVC 3 /數據註釋 有一個內置/簡單的方法來驗證 確保電子郵件地址是 正確的格式?

不是內置的,但可以使用[RegularExpression]。 Scott Gu在blog post中舉例說明了這樣的正則表達式。他寫了一個自定義EmailAttribute來自RegularExpressionAttribute以避免重複邏輯。

+0

假設我想寫我自己的屬性,如[電子郵件]。我怎麼能做到這一點,並讓它產生不顯眼的JavaScript。你能爲我指出正確的方向嗎? – Dismissile 2011-05-27 14:26:07

+1

@Dismissile,結賬Scott Gu博客文章。在這裏,他從'RegularExpressionAttribute'派生出來,並且由於這個客戶端驗證會自動工作,因爲Regex屬性已經註冊了一個jQuery適配器。 – 2011-05-27 14:28:16

+0

很感謝。我剔除了它,但我沒有看到他實際上得出了它。 – Dismissile 2011-05-27 14:31:21

9

Data Annotation Extensions庫的[Email]屬性允許驗證電子郵件地址。

還有一個blog post概述如何使用該庫。

+2

Vadim的意思是說現在有一個NuGet軟件包,包括內置的電子郵件,日期,CreditCard等DataAnnotations。非常好。項目網站:http://dataannotationsextensions.org。 – 2011-10-14 12:20:00

10

我認爲這是你正在尋找的代碼(這類似於ScottGu的例子,但也顯示了默認的錯誤消息,而不是屬性名的顯示名稱):

public class EmailAttribute : RegularExpressionAttribute 
{ 
    private const string defaultErrorMessage = "'{0}' must be a valid email address"; 

    public EmailAttribute() : 
     base("^[a-z0-9_\\+-]+(\\.[a-z0-9_\\+-]+)*@[a-z0-9]+(\\.[a-z0-9]+)*\\.([a-z]{2,4})$") 
    { } 

    public override string FormatErrorMessage(string name) 
    { 
     return string.Format(defaultErrorMessage, name); 
    } 

    protected override ValidationResult IsValid(object value, 
              ValidationContext validationContext) 
    { 
     if (value != null) 
     { 
      if (!base.IsValid(value)) 
      { 
       return new ValidationResult(
        FormatErrorMessage(validationContext.DisplayName)); 
      } 
     } 

     return ValidationResult.Success; 
    } 
} 

那麼你的模型屬性會是這樣的:

[DisplayName("My Email Address")] 
    [Email] 
    public string EmailAddress { get; set; }