我遇到了特定的问题,我有用户名字段,其中只有字母数字和. - 和 _ 是允许的,并且应始终以字母开头
以下是接受的示例
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')
来完成。