电子邮件验证正则表达式在连字符上失败

时间:2011-11-18 05:05:38

标签: javascript regex email

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

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

有人可以解释原因吗?

4 个答案:

答案 0 :(得分:2)

这是解释:

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

这意味着:

  • 应该有一个或多个数字,单词字符(字母,数字和下划线)和空格(空格,制表符和换行符)或'。'。请参阅reference of '\w'

  • 接下来是'。',

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

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

修改后的解决方案

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

答案 1 :(得分:1)

因为@之后您要查找字母,数字_.,然后是句号,然后是字母数字。在-之后的任何地方,您都不允许@

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

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

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

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

答案 2 :(得分:1)

使用此正则表达式:

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

它会接受a-bc@def.com以及abc@de-f.com等电子邮件。

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

Why won't this accept email addresses with a hyphen after the @?

希望这有帮助。

答案 3 :(得分:0)

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

^[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]$