正则表达式以匹配电子邮件

时间:2012-06-10 12:02:45

标签: php javascript regex

我遇到了特殊的问题我有用户名字段,只有字母数字和。 - 和_是允许的,应始终以字母

开头

这里是接受的例子

someone@mydomain.com
something1234@mydomain.com
someething.something@mydomain.com
something-something@mydomain.com
something_something@mydomain.com
something_1234@mydomain.com 
something.123@mydomain.com
something-456@mydomain.com

到目前为止我所做的是

[a-zA-Z0-9]+[._-]{1,1}[a-zA-Z0-9]+@mydomain.com

这符合我的所有要求,除了问题匹配

someone@mydomain.com
someont123@mydomain.com

但它甚至匹配

someone_someone_something@mydomain.com 

这不是必需的我真的没有得到如何解决我尝试的这一件事

[a-zA-Z0-9]+[._-]{0}[a-zA-Z0-9]+@mydomain.com

但这也没有解决我的问题,现在它接受了像

这样的一切
something+455@mydomain.com 

这不是必需的,请帮帮我

2 个答案:

答案 0 :(得分:1)

如果您想使-.成为可选项,那么您必须将{1,1}(量词:一次)替换为?(量词:一个或没有)这里:

 [a-zA-Z0-9]+[._-]?[a-zA-Z0-9]+@mydomain.com

这个正则表达式也匹配没有分隔符-._的较短地址的原因是你没有断言整个字符串,而只是它的一部分。使用开始^和结束$锚:

 ^[a-zA-Z0-9]+[._-]?[a-zA-Z0-9]+@mydomain\.com$

答案 1 :(得分:1)

这就是为什么我们有filter_var($email, FILTER_VALIDATE_EMAIL)

如果电子邮件地址有效,那么您只需检查它是否以@domain.com结尾。这可以通过strrpos($email, '@domain.com')完成。