mvc4 regularexpression来验证电子邮件

时间:2015-08-23 07:38:37

标签: c# regex asp.net-mvc-4

我想验证用户输入的电子邮件。我想验证电子邮件是否包含gmail,yahoo,hotmail,rediffmail,然后不允许用户输入此电子邮件。

我尝试了正则表达式

^([\w-\.]+@(?!gmail)(?!yahoo)(?!hotmail)(?!outlook)(?!rediffmail)([\w-]+\.)+[\w-]{2,6})?$

验证电子邮件中是否有gmail or yahoo or hotmail。但是如果用户输入someone@Gmail.com or someone@gMaIl.com,那么即使它是错误的,也允许用户。我想用忽略区分大小写来检查它。

这里我想忽略区分大小写。我查看了这个链接https://msdn.microsoft.com/en-us/library/yd1hzczs%28v=vs.110%29.aspx 但是我无法在哪里将?i 放在上面的表达式中。我想在客户端验证它。我在MVC模型中使用这个表达式。

[RegularExpression(@"^([\w-\.]+@(?!gmail)(?!yahoo)(?!hotmail)(?!outlook)(?!rediffmail)([\w-]+\.)+[\w-]{2,4})?$", ErrorMessage = "Please enter valid email")]

3 个答案:

答案 0 :(得分:0)

你可以这样写:

^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(?!hotmail|gmail|yahoo)(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$

答案 1 :(得分:0)

你应该把它放在表达式

前面
^(?i)([\w-\.]+@(?!gmail)(?!yahoo)(?!hotmail)(?!outlook)(?!rediffmail)([\w-]+\.)+[\w-]{2,6})?$

我认为js正则表达式忽略大小不同于.NET正则表达式((?i)vs / i)。 鉴于正则表达式在服务器端可以正常工作,但客户端会抛出异常情况。

这是一种解决方法

^([\w-\.]+@(?!(g|G)(m|M)(a|A)(i|I)(l|L))(?!(y|Y)(a|A)(h|H)(o|O)((o|O)))(?!(h|H)(o|O)(t|T)(m|M)(a|A)(i|I)(l|L))(?!(o|O)(u|U)(t|T)(l|L)(o|O)(o|O)(k|K))(?!(r|R)(e|E)(d|D)(i|I)(f|F)(f|F)(m|M)(a|A)(i|I)(l|L))([\w-]+\.)+[\w-]{2,6})?$

尽管它很难看,但希望能在双方都这样做。

答案 2 :(得分:0)

使用Regex的另一种方法是创建自定义ValidationAttribute

这个用例可能会变得冗长和丑陋。
public class WorkEmailAddressAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value == null)
        {
            return null;
        }

        string[] personalEmailDomains = new string[] { "@gmail.com", "@yahoo.com", "@hotmail.com", "@outlook.com" };
        string valueString = value.ToString();

        foreach (string personalEmailDomain in personalEmailDomains)
        {
            if (valueString.Contains(personalEmailDomain))
            {
                return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName));
            }
        }

        return null;
    }
}