使用带有正则表达式的单字符域名验证电子邮件地址

1 c# regex email

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

这是正则表达式:

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

好的,基本上你可以抛出的所有合理有效的电子邮件地址都将验证.我知道甚至可能会出现一些无效的问题,但这对我的特定用例来说是可以接受的.

现在恰好是joe@x.com没有验证的情况.并猜测x.com实际上是一个存在的域名(由paypall拥有).

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

@[^\.][\w\.\-]+
Run Code Online (Sandbox Code Playgroud)

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

@[^\.]
Run Code Online (Sandbox Code Playgroud)

如果我删除[^]我正则表达式的域x.com验证,但现在正则表达式允许域的名称以一个点,比如.test.com开始的一部分; 这对我来说有点放松了;-)

所以我的问题是如何能负字符列表部分影响我的单个字符检查,基本上我读的正则表达式的方法是:"确保该字符串不以一个点开始",但apparantly它做更多.

任何帮助,将不胜感激.

问候,

克瓦

Guf*_*ffa 5

正如Luis建议的那样,你可以使用[^\.][\w\.\-]*匹配domtain名称,但现在它也会匹配地址,如john@x.....comjohn@@.com.您可能希望确保一次只有一个句点,并且@之后的第一个字符比仅仅不是句点更受限制.

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

([\w\-]+\.)+
Run Code Online (Sandbox Code Playgroud)

所以你的模式是:

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