我遇到了特殊的问题我有用户名字段,只有字母数字和。 - 和_是允许的,应始终以字母
开头这里是接受的例子
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
这不是必需的,请帮帮我
答案 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')
完成。