2011-04-05 240 views
3

我正在開發一個網站,使用新的MVC網站模板附帶的內置帳戶模型/控制器。我希望只允許用戶在他們的電子郵件地址中使用兩個特定域名之一進行註冊。只允許來自特定電子郵件域的註冊

因此,例如他們可以註冊他們是否使用@ domain1.co.uk或@ domain2.co.uk,但不能使用其他域名(例如Gmail,Yahoo等)。

如果任何人都可以指出我的方向會很棒。

回答

6

如果使用MVC3默認站點,您將擁有一個/Models/AccountModels.cs文件。您可以在其中添加正則表達式以導致客戶端*和服務器端驗證。

public class RegisterModel 
{ 
    ... 

    [Required] 
    [DataType(DataType.EmailAddress)] 
    [Display(Name = "Email address")] 
    [RegularExpression(@"^[a-zA-Z0-9._%+-]+(@domain1\.co\.uk|@domain2\.co\.uk)$", ErrorMessage = "Registration limited to domain1 and domain2.")] 
    public string Email { get; set; } 

    ... 
} 

你需要制定出作品出最適合您的要求的表達。

* 客戶端驗證假設您的視圖引用了jquery.validate腳本,並具有Html.ValidationMessageFor(m => m.Email)和/或Html.ValidationSummary(),這應該是默認設置。

+0

謝謝賈斯汀,這是我的解決方案。它完美的作品。感謝所有發佈答案的其他人。 – 0NLY777 2011-04-06 08:17:02

+0

很高興聽到它!不妨使用內置的功能,對吧? – JustinStolle 2011-04-06 08:28:07

+0

謝謝賈斯汀。這節省了我的時間。 – tnktnk 2017-05-17 16:53:05

2

更重要的是你需要比:

if(email.Contains("@domain1.co.uk") || email.Contains("@domain2.co.uk")) 
    Register(email); 
else 
    throw, return false, whatever() 
+1

對於whatever()部分+1。 – 2011-04-05 15:48:08

0

當需要進行驗證時,即填充電子郵件字段時,請使用正則表達式來確保它位於域中。至於實際的正則表達式應該是什麼,網上有很多關於驗證電子郵件地址的討論。它甚至歸結爲一個有效的電子郵件地址應該包含的內容。我在網上找到了這個例子,但它可能不是最好的解決方案,因爲我不是正則表達式專家。我曾與幾個例子嘗試過,但我敢肯定,你可以拿出一些會通過時,他們不應該:

^\w+([-+.']\w+)*@mail.com$

哪裏mail.com是要檢查對域。如果您有多個域,您可以擴展正則表達式,或者使用任何其他您想使用的正則表達式替換mail.com

順便說一句我發現這個forums.asp.net文章的正則表達式涉及到像你這樣的問題。

相關問題