PHP 5.5 preg_replace使用返回null的模式数组


PHP 5.5 preg_replace using array of patterns returning null

我看过关于这个类似主题的其他问题,并尝试了这些建议,但它们似乎不起作用。

这是我的代码:

<?php
$badChars = array('/</', '/>/', '/$/', '/''/', '/=/', '/@/', '/'//');
$cleanData = "Text -with /stuff I don@'t want";
echo $cleanData . "'n";
$cleanData = preg_replace($badChars, '', $cleanData);
echo $cleanData . "'n";
?>

请注意,模式数组将根据场景而变化。这是一个数据清理练习。例如:如果处理电子邮件字段,我们将暂时放弃@模式。

输出:

Text -with /stuff I don@'t want
PHP Warning:  preg_replace(): No ending delimiter '/' found in /home/tim/xm_code/symphony/code/components/controllers/test.php on line 9
Process finished with exit code 0

我找不到任何东西来帮助我解决这个问题。什么好主意吗?

您的双反斜杠正在转义您的结束分隔符。所以

'/''/'

必须是

'/'''/'

也可以使用字符类,而不需要数组。第二种选择,使用str_replace,因为字符都是静态的。

$badChars = array('<', '>', '$', '''', '=', '@', '/');
$cleanData = "Text -with /stuff I don@'t want";
echo $cleanData . "'n";
$cleanData = str_replace($badChars, '', $cleanData);