我正在尝试使用此正则表达式验证电子邮件地址:^.*(?=.{8,})[\w.]+@[\w.]+[.][a-zA-Z0-9]+$
它接受了a-bc@def.com
这样的电子邮件,但拒绝了abc@de-f.com
等电子邮件(我正在http://tools.netshiftmedia.com/regexlibrary/使用该工具进行测试)。
有人可以解释原因吗?
答案 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]$