具有特定条件的电子邮件的正则表达式验证

Posted

技术标签:

【中文标题】具有特定条件的电子邮件的正则表达式验证【英文标题】:Regex validation for email with specific condition 【发布时间】:2021-11-22 00:15:02 【问题描述】:

目前我正在使用以下代码来验证电子邮件

public static bool IsValidEmail(string email)
        
            var r = new Regex(@"^([0-9a-zA-Z]([-\.\'\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]2,9)$");
            return !string.IsNullOrEmpty(email) && r.IsMatch(email);
        

现在要验证此“abc@a.bb.com”电子邮件是否为有效电子邮件 ID。正则表达式需要做哪些改变?

【问题讨论】:

不使用正则表达式?即使emailregex.com 有时也是错误的。你可以改用docs.microsoft.com/en-us/dotnet/api/…。 @jeremy 感谢您的回复,我希望在我的正则表达式中进行必要的更改/编辑以接受“abc@a.bb.com” ([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+ 仅匹配以字母数字开头和结尾的子域,因此必须包含 2 个字符。但我仍然不会尝试“修复”正则表达式,因为正则表达式永远会 100% 正确。不要试图用锤子做任何事情,使用正确的工具。如果您想检查电子邮件是否有效,请尝试发送验证码。 【参考方案1】:

使用此正则表达式并不是验证电子邮件的最佳方式。

但是,将您的正则表达式更正为您要求的模式,它将是这样的:

var r = new Regex(@"^([0-9a-zA-Z]([-\.\'\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z\.])+[.a-zA-Z]2,9)$");

仍然坚持正则表达式,你可以在:https://www.ex-parrot.com/pdw/Mail-RFC822-Address.html中找到更完整的模式

我鼓励您按照@Jeremy Lakeman 的建议使用 Microsoft 文档作为电子邮件地址 -> https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.mailaddress.trycreate?view=net-5.0

【讨论】:

以上是关于具有特定条件的电子邮件的正则表达式验证的主要内容,如果未能解决你的问题,请参考以下文章

用于验证特定模式的正则表达式

具有特定特殊字符的用户名的正则表达式

2019手机号码JS正则表达式验证实例代码

10个常用的PHP正则表达式

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

为啥 jQuery 的电子邮件验证正则表达式如此简单?