фильтрация плохих слов из текста

Эта функция фильтрует электронную почту из текста и возвращает сопоставленный шаблон

function parse($text, $words) { $resultSet = array(); foreach ($words as $word){ $pattern = 'regex to match emails'; preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE ); $this->pushToResultSet($matches); } return $resultSet; } 

Подобным образом я хочу $resultSet плохие слова с текстом и возвращать их как $resultSet .

Вот код для фильтрации имен

ТЕСТИРОВАТЬ ЗДЕСЬ

 $badwords = array('shit', 'fuck'); // Here we can use all bad words from database $text = 'Man, I shot this f*ck, sh/t! fucking fu*ker sh!tf*cking sh\t ;)'; echo "filtered words <br>"; echo $text."<br/>"; $words = explode(' ', $text); foreach ($words as $word) { $bad= false; foreach ($badwords as $badword) { if (strlen($word) >= strlen($badword)) { $wordOk = false; for ($i = 0; $i < strlen($badword); $i++) { if ($badword[$i] !== $word[$i] && ctype_alpha($word[$i])) { $wordOk = true; break; } } if (!$wordOk) { $bad= true; break; } } } echo $bad ? 'beep ' : ($word . ' '); // Here $bad words can be returned and replace with *. } 

Что заменяет badwords beep

Но я хочу подтолкнуть плохие слова к $this->pushToResultSet() и вернуться, как в первом коде фильтрации электронной почты.

могу ли я сделать это с помощью моего плохого кода фильтрации?

Грубо преобразуя ответ Дэвида Атчли на PHP, работает ли это так, как вы этого хотите?

 $blocked = array('fuck','shit','damn','hell','ass'); $text = 'Man, I shot this f*ck, damn sh/t! fucking fu*ker sh!tf*cking sh\t ;)'; $matched = preg_match_all("/(".implode('|', $blocked).")/i", $text, $matches); $filter = preg_replace("/(".implode('|', $blocked).")/i", 'beep', $text); var_dump($filter); var_dump($matches); 

JSFiddle для рабочего примера.

Да, вы можете сопоставлять плохие слова (сохранение на потом), заменять их в тексте и динамически строить регулярное выражение на основе массива плохих слов, которые вы пытаетесь фильтровать (вы можете сохранить его в БД, загрузить из JSON и т. Д. ). Вот основная часть рабочего примера:

 var blocked = ['fuck','shit','damn','hell','ass'], matchBlocked = new RegExp("("+blocked.join('|')+")", 'gi'), text = $('.unfiltered').text(), matched = text.match(matchBlocked), filtered = text.replace(matchBlocked, 'beep'); 

См. Приведенную выше ссылку JSFiddle для полного рабочего примера.