我用这个

@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

Regexp来验证电子邮件

([\w\.\-]+) -用于第一级域名(许多字母和数字,也有点和连字符) ([\w\-]+) -用于二级域 ((\.(\w){2,3})+) -这是用于其他级别域(从3到无穷),其中包括一个点和2或3个字面量

这个正则表达式有什么问题?

编辑:它与“something@someth.ing”电子邮件不匹配


当前回答

在c#中使用regex方法进行字符串搜索

如何通过正则表达式验证电子邮件?

string EmailPattern = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
if (Regex.IsMatch(Email, EmailPattern, RegexOptions.IgnoreCase))
{
    Console.WriteLine("Email: {0} is valid.", Email);
}
else
{
    Console.WriteLine("Email: {0} is not valid.", Email);
}

使用Reference String.Regex()方法

其他回答

string patternEmail = @"(?<email>\w+@\w+\.[a-z]{0,3})";
Regex regexEmail = new Regex(patternEmail);

像。museum这样的顶级域名就不是这样匹配的,还有一些其他的长顶级域名。此外,你可以使用MailAddress类验证电子邮件地址,微软在这里解释了一个说明:

与使用正则表达式验证电子邮件地址不同, 你可以使用System.Net.Mail.MailAddress类。来确定 电子邮件地址是否有效,将电子邮件地址传递给 mailaddress (String)类构造函数。

public bool IsValid(string emailaddress)
{
    try
    {
        MailAddress m = new MailAddress(emailaddress);

        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

这为您省去了很多麻烦,因为您不必编写(或试图理解他人的)正则表达式。

编辑:对于那些对尝试/捕捉过敏的人:在。net 5中,你可以使用MailAddress.TryCreate。请参见https://stackoverflow.com/a/68198658,包括如何修复的示例。,空格,缺失。tld等。

Visual studio已经有很多年了。

\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

希望这能有所帮助!

以下是我从这里收集信息和微软文档后的解决方案:

/// <summary>
/// * TLD support from 2 to 5 chars (modify the values as you want)
/// * Supports: abc@gmail.com.us
/// * Non-sensitive case 
/// * Stops operation if takes longer than 250ms and throw a detailed exception
/// </summary>
/// <param name="email"></param>
/// <returns>valid: true | invalid: false </returns>
/// <exception cref="ArgumentException"></exception>

private bool validateEmailPattern(string email) {
    try {
        return Regex.IsMatch(email,
            @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,5})+)$",
            RegexOptions.None, TimeSpan.FromMilliseconds(250));
    } catch (RegexMatchTimeoutException) {
        // throw an exception explaining the task was failed 
        _ = email ?? throw new ArgumentException("email, Timeout/failed regexr processing.", nameof(email));
    }
}

以上反应的组合。我会使用微软首选的方法使用MailAddress,但实现为字符串的扩展:

public static bool IsValidEmailAddress(this string emailaddress)
    {
        try
        {
            MailAddress m = new MailAddress(emailaddress);
            return true;
        }
        catch (FormatException)
        {
            return false;
        }
    }

然后只需验证任何字符串作为电子邮件地址:

string customerEmailAddress = "bert@potato.com";
customerEmailAddress.IsValidEmailAddress()

清洁简单,便于携带。希望它能帮助到别人。电子邮件的正则表达式很乱。

也就是说,MattSwanson有一个关于这个主题的博客,他强烈建议不要使用正则表达式,而是只检查“@”abd可能是一个点。点击这里阅读他的解释:https://mdswanson.com/blog/2013/10/14/how-not-to-validate-email-addresses.html