Php 电子邮件验证-我的正则表达式代码有什么问题?

Php 电子邮件验证-我的正则表达式代码有什么问题?,php,regex,preg-match,Php,Regex,Preg Match,我正在尝试使用preg_match验证电子邮件地址 但是我得到了这个错误 警告:preg_match():未知修饰符“+” 这是我的密码 preg_match("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", $email, $matches); 有人能告诉

我正在尝试使用preg_match验证电子邮件地址

但是我得到了这个错误

警告:preg_match():未知修饰符“+”

这是我的密码

preg_match("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", $email, $matches);
有人能告诉我我的正则表达式有什么问题吗


谢谢

使用
preg\u match
时,需要在正则表达式周围放置分隔符。标准是
/
。如果在表达式中使用分隔符,则必须对其进行转义

preg_match("/[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/", $email, $matches);

你也可以考虑使用< /P>

filter_var($email, FILTER_VALIDATE_EMAIL);

此外,这些表达式
(?:[a-z0-9-]*[a-z0-9])?
有点奇怪。大概可以用
[a-z0-9-]*?
来代替它们,以简单起见。@Boristeider我认为应该是
[a-z0-9-]+?
:)@HamZaDzCyberDeV我不这么认为,因为
+
至少需要一个非捕获组中的构造,后面跟着
,这意味着它是可选的(需要零次或一次)-因此表达式表示零次或多次(即a
*
).再想一想,我甚至不确定是否需要
-表达式可能很贪婪。我强烈建议不要自己编写此代码。即使
空格
也是电子邮件中的有效字符。.重点是不要使用正则表达式解析电子邮件。.简单地说,
*.
就是这样,您可以在电子邮件的右侧设置更严格的限制
@
,它必须是一个有效的域名,但是是的,几乎所有的东西都在左边。