用于验证电子邮件的正则表达式

本文关键字:正则表达式 电子邮件 验证 用于 | 更新日期: 2023-09-27 18:09:13

我想验证用户输入的电子邮件。我想验证如果电子邮件包含gmail,yahoo,hotmail,rediffmail,则不允许用户输入此电子邮件。

我尝试遵循Regex

^(['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")]

用于验证电子邮件的正则表达式

你可以这样写:

^([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})(']?)$

你应该把它放在表达式的正前方

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

我认为js正则表达式忽略大小写不同于。net regex ((? I) vs/I)。给定的regex在服务器端可以正常工作,但在客户端会抛出异常。

这是一个解决方法

^(['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})?$

虽然很丑,但希望两边都能起作用。

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