我正在使用这个正则表达式
^(?=.{0,150}$)\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
用于验证电子邮件地址。当我输入此电子邮件地址时:konstinköpet@gmail.com
。它正在使用正则表达式验证器(它显示InValidEmail地址),但在C#代码中验证它不起作用(将其作为validEmail地址)
return System.Text.RegularExpressions.Regex.IsMatch(
strEmailAddress,
@"^(?=.{0,150}$)\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*",
System.Text.RegularExpressions.RegexOptions.IgnoreCase
);
答案 0 :(得分:1)
如果我了解您的问题,您需要地址:konstinköpet@gmail.com验证失败,因为它包含Unicode字符。你的正则表达式使用\ w字符类,它默认匹配任何单词字符,包括任何定义为字母的Unicode字符。
你可以通过指定你编码的RegexOptions.ECMAScript强制\ w只是[a-zA-Z_0-9]:
return System.Text.RegularExpressions.Regex.IsMatch(
strEmailAddress,
@"^(?=.{0,150}$)\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*",
System.Text.RegularExpressions.RegexOptions.IgnoreCase | System.Text.RegularExpressions.RegexOptions.RegexOptions.ECMAScript
);
或者你可以用[a-zA-Z_0-9]替换\ w,这会产生相同的效果。
答案 1 :(得分:0)
尝试使用这个:
Regex.IsMatch(strEmailAddress, @"^[\\p{L}0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[\\p{L}0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[\\p{L}0-9](?:[\\p{L}0-9-]*[\\p{L}0-9])?\.)+[\\p{L}0-9](?:[\\p{L}0-9-]*[\\p{L}0-9])?$", RegexOptions.IgnoreCase);
它将允许非ASCII字符
答案 2 :(得分:0)
以$
作为示例结束您的正则表达式。
http://www.dotnetperls.com/regex-match
答案 3 :(得分:0)
我认为更好的解决方案是使用System.Net.Mail.MailAddress类来验证电子邮件地址。
尝试使用以下代码:
try {
MailAddress addr = new System.Net.Mail.MailAddress(email);
return true;
}
catch {
return false;
}
<强>更新强> 正则表达式解决方案:
bool d = Regex.IsMatch("konstinköpet@gmail.com", @"^([\p{L}\.\-\d]+)@([\p{L}\-\.\d]+)((\.(\p{L}){2,63})+)$", RegexOptions.IgnoreCase);
适合我。