Сопоставить список слов в строке с пробелом между символами

Скажи, что у меня есть строка, которая выглядит так:

Дайте мне свой xw al l et et сейчас!

И список запрещенных слов:

кошелек, банан, картошка

Как бы я написал регулярное выражение, чтобы поймать любое из этих слов? Даже с пробелами между персонажами.

Приветствия.

0

Решение

Этот код сделает работу:

foreach($banned as $word) {
$chars = str_split($word);
$pattern = implode(' ?', $chars);
$check = preg_match('/'.$pattern.'/i', $text);
}

$ banned — массив запрещенных слов

$ text — это текст, который вы проверяете на наличие запрещенных слов

И $ галочки, если данное запрещенное слово найдено, и, в зависимости от вашей логики, которую вы хотите достичь, используйте эту переменную подходящим для вас способом.

1

Другие решения

Простой способ поймать любое слово (без пробела):

function censorship($bannedwords, $sentence) {
foreach($bannedwords as $word) $sentence = str_replace($word, '****', $sentence);
return $sentence;
}

$bannedwords = ['banana', 'potato'];
echo censorship($bannedwords, 'Every banana is a potato');
// Output : Every **** is a ****
-1

По вопросам рекламы [email protected]