Skip to main content
 首页 » 编程设计

c#之使用正则表达式验证具有单个字符域名的电子邮件地址

2024年01月16日39lovecherry

我有一个正则表达式,用于验证电子邮件地址。我喜欢此正则表达式,因为它相当放松,并且已经证明可以很好地工作。

这是正则表达式:

(['\"]{1,}.+['\"]{1,}\s+)?<?[\w\.\-]+@[^\.][\w\.\-]+\.[A-Za-z]{2,}>? 


好的,基本上您可以扔给它的所有合理有效的电子邮件地址都将得到验证。我知道,即使是一些无效的,也可能会掉线,但这对于我的特定用例来说是可以的。

现在碰巧是joe@x.com无法验证的情况。并猜测x.com实际上是一个存在的域名(由paypall拥有)。

查看验证域名的正则表达式部分:

@[^\.][\w\.\-]+ 


看起来这应该能够解析x.com域名,但事实并非如此。罪魁祸首是检查域名不能以点开头的部分(例如test @ .test.com)

@[^\.] 


如果我删除了正则表达式的[^。]部分,则域名x.com会进行验证,但是现在正则表达式允许以点开头的域名,例如.test.com;。这对我来说有点放松;-)

所以我的问题是,否定字符列表部分如何影响我的单字符检查,基本上我正在阅读正则表达式的方式是:“确保此字符串不以点开头”,但显然它会做得更多。

任何帮助,将不胜感激。

问候,

瓦塞姆

请您参考如下方法:

正如路易斯建议的那样,您可以使用[^\.][\w\.\-]*来匹配domtain名称,但是现在它也将匹配john@x.....com和john@@.com这样的地址。您可能要确保一次只存在一个句点,并且@之后的第一个字符比不仅仅是句点受到更多限制。

使用以下方式匹配域名和期间(以及子域及其期间):

([\w\-]+\.)+ 


因此,您的模式将是:

(['\"]{1,}.+['\"]{1,}\s+)?<?[\w\.\-]+@([\w\-]+\.)+[A-Za-z]{2,}>?