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

时间:2016-10-17 02:53:01

标签: php regex

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

这是我的代码:

<?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

我找不到任何东西可以帮我解决这个问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你的双反斜杠正在逃避你的结算分隔符。所以

'/\\/'

需要

'/\\\/'

或者使用角色类,你不需要数组。第二种方法是使用str_replace,因为字符都是静态的。

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