正则表达式不适用于C#代码

时间:2014-02-20 07:08:00

标签: c# asp.net regex

我正在使用这个正则表达式

^(?=.{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
);

4 个答案:

答案 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);

适合我。