用于验证电子邮件的正则表达式
本文关键字:正则表达式 电子邮件 验证 用于 | 更新日期: 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;
}
}