用于匹配电子邮件的正则表达式


regular expression to match emails

我遇到了特定的问题,我有用户名字段,其中只有字母数字和. - 和 _ 是允许的,并且应始终以字母开头

以下是接受的示例

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 

这不是必需的,请帮助我

如果要

使-.可选,则必须在此处将{1,1}(量词:一次)替换为?(量词:一个或无):

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

此正则表达式还匹配没有分隔符-._的较短地址的原因是,您不会断言整个字符串,而只是断言其中的一部分。使用开始^和结束$锚点:

 ^[a-zA-Z0-9]+[._-]?[a-zA-Z0-9]+@mydomain'.com$
这就是为什么

我们有filter_var($email, FILTER_VALIDATE_EMAIL).

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