Стоп Слова в строку - PullRequest
       22

Стоп Слова в строку

0 голосов
/ 05 февраля 2012

Я хочу создать функцию в PHP, которая будет возвращать true, когда обнаружит, что в строке есть несколько плохих слов.

Вот пример:

function stopWords($string, $stopwords) {
if(the words in the stopwords variable are found in the string) {
return true;
}else{
return false;
}

Пожалуйста, примитеэта $stopwords переменная является массивом значений, например:

$stopwords = array('fuc', 'dic', 'pus');

Как я могу это сделать?

Спасибо

Ответы [ 3 ]

1 голос
/ 05 февраля 2012

Используйте регулярные выражения :

  • \b соответствует границе слова, используйте ее для соответствия только целым словам
  • использовать флаг i для выполнения регистронезависимых совпадений

Подберите каждое слово так:

function stopWords($string, $stopwords) {
    foreach ($stopwords as $stopword) {
        $pattern = '/\b' . $stopword . '\b/i';
        if (preg_match($pattern, $string)) {
            return true;
        }
    }
    return false;
}

$stopwords = array('fuc', 'dic', 'pus');

$bad = stopWords('confucius', $stopwords); // true
$bad = stopWords('what the Fuc?', $stopwords); // false

Более короткая версия, вдохновленная ответом на этот вопрос: определить, содержит ли строка одно из набора слов в массиве использовать implode для создания одного большого выражения:

function stopWords($string, $stopwords) {
    $pattern = '/\b(' . implode('|', $stopwords) . ')\b/i';
    return preg_match($pattern, $string) > 0;
}
1 голос
/ 05 февраля 2012

Используйте функцию strpos .

// the function assumes the $stopwords to be an array of strings that each represent a
//  word that should not be in $string
function stopWords($string, $stopwords) 
{  
     // input parameters validation excluded for brevity..

     // take each of the words in the $stopwords array
     foreach($stopwords as $badWord)
     {
         // if the $badWord is found in the $string the strpos will return non-FALSE        
         if(strpos($string, $badWord) !== FALSE))
           return TRUE;
     }
     // if the function hasn't returned TRUE yet it must be that no bad words were found
     return FALSE;
 }
0 голосов
/ 05 февраля 2012
function stopWords($string, $stopwords) {
    $words=explode(' ', $string); //splits the string into words and stores it in an array
    foreach($stopwords as $stopword)//loops through the stop words array
    {
        if(in_array($stopword, $words)) {//if the current stop word exists 
            //in the words contained in $string then exit the function 
            //immediately and return true
            return true;
        }
    }
    //else if none of the stop words were in $string then return false
    return false;
}

Я предполагаю, что $stopwords это массив для начала.Так и должно быть.

...