首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用regex验证单字符域名的电子邮件地址

用regex验证单字符域名的电子邮件地址
EN

Stack Overflow用户
提问于 2010-01-06 15:34:00
回答 5查看 2.9K关注 0票数 1

我有一个正则表达式,我用它来验证电子邮件地址。我喜欢这个regex,因为它是相当放松的,并已证明工作相当好。

这里是正则表达式:

代码语言:javascript
运行
复制
(['\"]{1,}.+['\"]{1,}\s+)?<?[\w\.\-]+@[^\.][\w\.\-]+\.[A-Za-z]{2,}>?

好极了,基本上所有合理有效的电子邮件地址,你可以抛到它将验证。我知道,即使是一些无效的也会失败,但这对于我的具体用例来说是可以的。

现在恰好发生了joe@x.com不验证的情况。猜猜x.com实际上是一个存在的域名(由paypall拥有)。

查看验证域名的regex部分:

代码语言:javascript
运行
复制
@[^\.][\w\.\-]+

它看起来应该能够解析x.com域名,但它不能。

代码语言:javascript
运行
复制
@[^\.]

如果我移除^。部分regex域x.com验证,但现在regex允许以点开头的域名,例如.test.com;这对我来说有点太放松了;-)

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

任何帮助都将不胜感激。

致以敬意,

瓦西姆

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-01-06 16:02:05

正如Luis所建议的,您可以使用[^\.][\w\.\-]*来匹配域名,但是它现在也将匹配像john@x.....comjohn@@.com这样的地址。您可能需要确保一次只有一个句点,并且@之后的第一个字符比不作为句点更受限制。

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

代码语言:javascript
运行
复制
([\w\-]+\.)+

所以你的模式是:

代码语言:javascript
运行
复制
(['\"]{1,}.+['\"]{1,}\s+)?<?[\w\.\-]+@([\w\-]+\.)+[A-Za-z]{2,}>?
票数 5
EN

Stack Overflow用户

发布于 2010-01-06 15:36:55

如果您将[^\.][\w\.\-]+更改为[^\.][\w\.\-]*,它将如您所期望的那样工作!

原因是:[^\.]将匹配一个不是点的字符(在您的例子中,"x.com“上的"x”),然后尝试达到一个或多个字符,然后是一个点。你将匹配x后的点,并且没有更多的点可匹配。在第一个字符之后,*将匹配0或多个字符,这就是您想要的。

票数 3
EN

Stack Overflow用户

发布于 2010-01-06 15:36:57

将量词+ (意为一个或多个)改为*,表示零或多个。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2014032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档