我有这个简单的电子邮件正则表达式。
/^[a-z]+([\.-_]?[a-z0-9]+)*@([a-z]{3,})+(\.[a-z]{2,3})+$/i;
但是当我使用这个例子: first @ last @ example.com 它仍然可以使用,而且当我从表达式中删除@
个字符时:
`/^[a-z]+([\.-_]?[a-z0-9]+)*([a-z]{3,})+(\.[a-z]{2,3})+$/i
它给出了相同的结果。
此表达式允许在电子邮件中至少2个字符之间的无数个 at 符号(即@
)!!
这个表达式的问题在哪里?
答案 0 :(得分:3)
您的模式相当严格,您可能会想到验证电子邮件地址的其他选项,例如type="email"
,如果它是输入字段验证。
为什么正则表达式匹配@
即使你把它拿出来,或者匹配一个带有两个@
符号的字符串,也是由[.-_]
来匹配很多字符的连字符创建包含@
的范围。您需要改为使用[._-]
。
您可以将正则表达式“修复”为
/^[a-z]+([._-]?[a-z0-9]+)*[a-z]{3,}(\.[a-z]{2,3})+$/i
但是,这种正则表达式在现实生活中并不好用。
答案 1 :(得分:0)
你想要这样的东西吗?
/^[a-z\.\-_]+@([a-z]{3,})+(\.[a-z]{2,3})+$/
可能使用符号\.-_
你想在正则表达式中使用“。”或“ - ”或“_”,但是你忘了逃避“减号”。
或者你可以使用自己的但是有逃脱:
^[a-z]+([\.\-_]?[a-z0-9]+)*@([a-z]{3,})+(\.[a-z]{2,3})+$
PS:请记住,真正有效的电子邮件地址可能完全不同,并且具有巨大的正则表达式,此外,每个Web服务器都定义了允许的内容和电子邮件中的内容。