繁体   English   中英

Email 连字符验证正则表达式失败

[英]Email verification regex failing on hyphens

我正在尝试使用此正则表达式验证 email 地址: ^.*(?=.{8,})[\w.]+@[\w.]+[.][a-zA-Z0-9]+$

它接受像a-bc@def.com这样的电子邮件,但拒绝像abc@de-f.com这样的电子邮件(我正在使用位于http://tools.netshiftmedia.com/regexlibrary/的工具进行测试)。

谁能解释为什么?

这是解释:

在你的regualr表达式中,该部分匹配a-bc @ def.com和abc @ de-f.com[\\w.]+[.][a-zA-Z0-9]+$

它的意思是:

  • 应该有一个或多个数字,单词字符(字母,数字和下划线),以及空格(空格,制表符和换行符)或'。'。 参见'\\ w'参考文献

  • 接下来是'。',

  • 然后跟随集合a-zA-Z0-9一个或多个字符。

所以- in de-f.com与规则1中的第一个[\\w.]+格式不匹配。

修改后的解决方案

您可以将此部分调整为[\\w.-]+[.][a-zA-Z0-9]+$ 制作-在@string中验证。

因为在@你正在寻找字母,数字, _或者. ,然后是一个时期,然后是字母数字。 你不允许-@之后的任何地方。

您需要将-添加到其中一个字符类(除了单个文字句号,我将编写\\. )以允许连字符。

\\w是字母,数字和下划线。

. 在由[]表示的字符类中,只是一个句点,而不是任何字符。

在你的第一个表达式中,你没有限制为\\w ,你使用.* ,这是任何字符的出现次数超过0(实际上可能不是你想要的)。

使用此正则表达式:

var email-regex = /^[^@]+@[^@]+\.[^@\.]{2,}$/;

它将接受a-bc@def.com以及abc@de-f.comabc@de-f.com

你也可以在SO上提到一个类似的问题:

为什么这不会在@之后用连字符接受电子邮件地址?

希望这可以帮助。

以下正则表达式工作:

([A-Za-z0-9]+[-.-_])*[A-Za-z0-9]+@[-A-Za-z0-9-]+(\.[-A-Z|a-z]{2,})+

相反,您可以使用这样的正则表达式来允许任何电子邮件地址。

^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM