Asp.net mvc 仅允许从特定电子邮件域进行注册

Asp.net mvc 仅允许从特定电子邮件域进行注册,asp.net-mvc,regex,Asp.net Mvc,Regex,我正在开发一个使用新MVC站点模板附带的内置帐户模型/控制器的站点。我想能够只允许人们注册,如果他们在他们的电子邮件地址使用两个特定域之一 例如,如果他们使用@domain1.co.uk或@domain2.co.uk,他们可以注册,但不能使用其他域(例如Gmail、Yahoo等) 如果有人能给我指出正确的方向,那就太好了。你还需要什么 if( email.Contains("@domain1.co.uk") || email.Contains("@domain2.co.uk") ) R

我正在开发一个使用新MVC站点模板附带的内置帐户模型/控制器的站点。我想能够只允许人们注册,如果他们在他们的电子邮件地址使用两个特定域之一

例如,如果他们使用@domain1.co.uk或@domain2.co.uk,他们可以注册,但不能使用其他域(例如Gmail、Yahoo等)


如果有人能给我指出正确的方向,那就太好了。

你还需要什么

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

在前端(注册表表单)和后端验证


这里我建议进行客户端验证。

当需要进行验证时,即电子邮件字段是否已填充,请使用正则表达式确保它位于域中。至于实际的regex应该是什么,网上有很多关于验证电子邮件地址的讨论。它甚至可以归结为一个有效的电子邮件地址应该包含什么内容。我在网上找到了这个例子,但它绝不可能是最好的解决方案,因为我不是正则表达式专家。我试过几个例子,但我相信你能想出一些在不应该通过的时候会通过的例子:

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; }

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

其中
mail.com
是您要检查的域。如果您有多个域,您可以扩展正则表达式,或者执行多个检查,将正则表达式中的
mail.com
替换为您想要使用的任何其他内容


顺便说一句,我在这篇文章中发现了regex,它涉及到了与您类似的问题。

如果使用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()
,默认情况下应该是这样。

谢谢Justin,这是我的解决方案。它工作得很好。感谢所有其他发布答案的人。很高兴听到这个消息!还是使用内置功能吧?谢谢Justin。这节省了我的时间。@tnktnk酷!很高兴这有帮助。