正则表达式电子邮件验证

269

我使用这个。

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

正则表达式用于验证电子邮件

([\w\.\-]+) - 这是一级域名(包括多个字母和数字、点号和连字符)

([\w\-]+) - 这是二级域名

((\.(\w){2,3})+) - 这是其他等级的域名(从3到无限)包括一个点和2或3个字符

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

编辑:它无法匹配"something@someth.ing"类型的电子邮件地址。


1
除了您未包含RFC [5321]和[5322]指定的有效字符之外,没有其他问题。 - Brad Christie
14
你有一个问题 -> 你想到了“正则表达式” -> 现在你有两个问题 ;-) - Jakub Konecki
foo+bar@example.com是什么意思? - Valerij
2
只是关于你的正则表达式的一个评论。随着这些新的.amsterdam,.info和其他域名,正则表达式应该是:@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,})+)$"" - Ton Snoei
显示剩余2条评论
37个回答

0

请尝试以下代码:

using System.Text.RegularExpressions;
if  (!Regex.IsMatch(txtEmail.Text, @"^[a-z,A-Z]{1,10}((-|.)\w+)*@\w+.\w{3}$"))
        MessageBox.Show("Not valid email.");

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

0

C#中使用正则表达式进行字符串搜索

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

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);
}

使用参考 String.Regex() 方法


这对我来说是最好的选择,允许使用'+'和Unicode字符。 - Arvind Krmar

0

这是我们针对此情况的正则表达式:

@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                       @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                       @".)+))([a-zA-Z]{2,6}|[0-9]{1,3})(\]?)$",

有三个部分需要检查,最后一个可能是你需要的。具体术语{2,6}表示域名结尾TLD的最小/最大长度。 希望对你有所帮助。


-2

Visual Studio 已经有这个功能多年了。

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

希望这能帮到你!


3
电子邮件地址有19个非字母数字字符是有效的。这个正则表达式无法识别其中15个字符。此外,它允许以点或破折号开头或结尾的电子邮件地址,或者在@符号之前或之后有点或破折号。 - Jason Williams

-3

这段代码将使用正则表达式在c#.Net中帮助验证电子邮件id..它易于使用

if (!System.Text.RegularExpressions.Regex.IsMatch("<Email String Here>", @"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"))
        {
            MessageBox.show("Incorrect Email Id.");
        }

1
请解释您的代码是做什么的,以及为什么它可以解决问题。仅包含代码的答案(即使它能工作)通常不会帮助提问者理解他们的问题。 - SuperBiasedMan
嗨@SuperBiasedMan,这是一个用于验证C#语言电子邮件的代码,上面已经提到了。它不是用于Python的。因此,在不理解或仅仅为了好玩而贬低任何人的答案之前,请不要轻易下结论。 - RAVI VAGHELA

-5

结合以上回答,我会使用微软首选的 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在他的博客中强烈建议不要使用正则表达式,而是只检查'@'和可能的点。在这里阅读他的解释:https://mdswanson.com/blog/2013/10/14/how-not-to-validate-email-addresses.html


这个没有捕获双点号“..”或者内联空格“. ”。我会使用正则表达式代替。 - Offir
1
捕获异常并不等同于验证...与堆栈跟踪构建机制相关的巨大开销等。 - Sharique Abdullah
@ShariqueAbdullah 最小的开销,比正则表达式更易读。随着邮件API的改进而不断提高。正如所述,这是微软批准的方法,也许可以与他们争论。通过异常处理进行验证是一种非常被接受的验证方法,许多主流框架都使用这种方法。 - ComeIn
根据Matt Swanson的说法,使用正则表达式验证电子邮件是不好的做法。https://mdswanson.com/blog/2013/10/14/how-not-to-validate-email-addresses.html - ComeIn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接