我想验证用户输入的电子邮件。我想验证电子邮件是否包含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")]
答案 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;
}
}