我正在编写虚假的电子邮件地址,我只是想确保它们是有效的电子邮件格式,所以我试图删除下面集合中没有的任何字符:
$jusr['email'] = preg_replace('/[^a-zA-Z0-9.-_@]/g', '', $jusr['email']);
我的Windows机器上没有任何问题,但是在linux dev服务器上,每次运行此代码时都会出现此错误:
Warning: preg_replace() [function.preg-replace]: Unknown modifier 'g' in /var/www/vhosts/....
我认为这是正则表达式字符串,但我不能把它固定下来。帮助不大?感谢。
澄清:我不是想要容纳所有有效的电子邮件地址(我的目的不需要),我只需要弄清楚我的preg_replace正则表达式有什么问题。
答案 0 :(得分:26)
g
不是PCRE中的有效修饰符(PHP使用的正则表达式实现),因为它根本不需要;默认情况下,preg_replace()
将执行全局替换。您可以在真正的Perl正则表达式和JavaScript正则表达式中找到修饰符,但不能在PCRE中找到。
只需删除g
:
$jusr['email'] = preg_replace('/[^a-zA-Z0-9.-_@]/', '', $jusr['email']);
答案 1 :(得分:3)
您的PCRE修改器无效。以下是有效PCRE修饰符的列表:
http://us.php.net/manual/en/reference.pcre.pattern.modifiers.php
g
(全局)修饰符默认为,,因此您不需要它。
答案 2 :(得分:3)
问题是g
不是valid PCRE modifier。试着看preg_match_all。
答案 3 :(得分:3)
除了/ g之外,正则表达式的内部部分似乎也没有效果:
[^a-zA-Z0-9.-_@]
首先,“^”(这是输入开始的metachar)在[...]内部没有意义(除非你允许包含“^”的电子邮件地址)。其次,短划线应该被转义或放到组的末尾,否则它将被视为范围运算符。最重要的是,您的表达不允许使用各种完全有效的电子邮件地址。检查一些examples。