2011-04-05 238 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文章的正则表达式涉及到像你这样的问题。

相关问题