在PHP中使用preg_match时,“在...中存在未知修饰符'g'”?


93

这是我要使用的正则表达式:

/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim

我在此网站上找到了它,当我在那里尝试时,它的效果很好。但是,一旦将其放入代码中,就会收到以下消息:

Warning: preg_match() [function.preg-match]: Unknown modifier 'g' in C:\xampp\htdocs\swebook\includes\classes.php on line 22

任何人都可以解释出什么问题了,为什么它可以在该网站上运行,而不是在我的代码中?


1
如果我们确切知道您要使用正则表达式要做什么,我们可以为您提供更好的帮助。无论如何,您需要更好的帮助-或正则表达式。在该网站上所有糟糕的电子邮件正则表达式中,您很可能选择了最差的一个。:/
艾伦·摩尔

2
仅供参考,您的正则表达式将验证这些邮件类型:“ -.-.-... @-some--domain--.com”,而这些类型的VALID邮件将不验证:“ info @ subdomain。 domain.com”。最后但并非最不重要的一点是\ w非常危险,因为PHP preg使用了Perl兼容的正则表达式,而不是Java POSIX。如果PHP在非美国/英国本地化服务器上​​运行,则\ w也将匹配带重音的字母,因此您将匹配“àèìòù@domain.com”具有有效的邮件。在这里阅读更多详细信息:it.php.net/manual/en/function.preg-replace.php#92443
Marco Demaio 2010年

Answers:


170

没有修饰gpreg_match。相反,您必须使用该preg_match_all功能。

所以代替:

preg_match("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/gim", ....)

使用:

preg_match_all("/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/im", ....)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.