Значения в вашем массиве $search
, а не регулярные выражения.
Сначала исправьте это:
$search = array(
'/bad-word/',
);
Затем вы можете применить флаг i
без учета регистра:
$search = array(
'/bad-word/i',
);
Вам не нужен флаг g
, чтобы соответствовать глобально (то есть, более одного раза), потому что preg_replace
будет обрабатывать это для вас.
Однако, возможно, вы могли бы использовать метасимвол границы слова \b
, чтобы избежать совпадения с вашей строкой "плохого слова" внутри другого слова . Это может повлиять на то, как вы формируете свой список «плохих слов».
$search = array(
'/\bbad-word\b/i',
);
Если вы не хотите загрязнять $search
этими деталями реализации, то вы можете сделать то же самое немного более программно:
$search = array_map(
create_function('$str', 'return "/\b" . preg_quote($str, "/") . "\b/i";'),
$search
);
(я не использовал недавний синтаксис лямбда PHP, потому что кодовая панель его не поддерживает; ищите его, если вам интересно!)
Обновление Полный код:
function swear_filter($string){
$search = array(
'bad-word',
);
$replace = array(
'****',
);
// regex-ise input
$search = array_map(
create_function('$str', 'return "/\b" . preg_quote($str, "/") . "\b/i";'),
$search
);
return preg_replace($search, $replace, $string);
}