0

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

以下是接受的示例

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 

这不是必需的,请帮助我

4

2 回答 2

1

如果要使-or.可选,则必须在此处将{1,1}(quantifier: once) 替换为?(quantifier: one or none):

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

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

 ^[a-zA-Z0-9]+[._-]?[a-zA-Z0-9]+@mydomain\.com$
于 2012-06-10T12:14:31.657 回答
1

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

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

于 2012-06-10T12:35:57.657 回答