我有一个正则表达式,我用它来验证电子邮件地址。我喜欢这个regex,因为它是相当放松的,并已证明工作相当好。
这里是正则表达式:
(['\"]{1,}.+['\"]{1,}\s+)?<?[\w\.\-]+@[^\.][\w\.\-]+\.[A-Za-z]{2,}>?好极了,基本上所有合理有效的电子邮件地址,你可以抛到它将验证。我知道,即使是一些无效的也会失败,但这对于我的具体用例来说是可以的。
现在恰好发生了joe@x.com不验证的情况。猜猜x.com实际上是一个存在的域名(由paypall拥有)。
查看验证域名的regex部分:
@[^\.][\w\.\-]+它看起来应该能够解析x.com域名,但它不能。
@[^\.]如果我移除^。部分regex域x.com验证,但现在regex允许以点开头的域名,例如.test.com;这对我来说有点太放松了;-)
因此,我的问题是,负字符列表部分如何影响我的单个字符检查,基本上,我读取正则表达式的方式是:“确保这个字符串不以点开头”,但显然它做的更多。
任何帮助都将不胜感激。
致以敬意,
瓦西姆
发布于 2010-01-06 16:02:05
正如Luis所建议的,您可以使用[^\.][\w\.\-]*来匹配域名,但是它现在也将匹配像john@x.....com和john@@.com这样的地址。您可能需要确保一次只有一个句点,并且@之后的第一个字符比不作为句点更受限制。
使用以下方法匹配域名和句点(以及子域及其句点):
([\w\-]+\.)+所以你的模式是:
(['\"]{1,}.+['\"]{1,}\s+)?<?[\w\.\-]+@([\w\-]+\.)+[A-Za-z]{2,}>?发布于 2010-01-06 15:36:55
如果您将[^\.][\w\.\-]+更改为[^\.][\w\.\-]*,它将如您所期望的那样工作!
原因是:[^\.]将匹配一个不是点的字符(在您的例子中,"x.com“上的"x”),然后尝试达到一个或多个字符,然后是一个点。你将匹配x后的点,并且没有更多的点可匹配。在第一个字符之后,*将匹配0或多个字符,这就是您想要的。
发布于 2010-01-06 15:36:57
将量词+ (意为一个或多个)改为*,表示零或多个。
https://stackoverflow.com/questions/2014032
复制相似问题