Функция стоп-слов - PullRequest
       23

Функция стоп-слов

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

У меня есть эта функция, которая возвращает true, если в массиве найдено одно из плохих слов $stopwords

function stopWords($string, $stopwords) {
    $stopwords = explode(',', $stopwords);
    $pattern = '/\b(' . implode('|', $stopwords) . ')\b/i';
    if(preg_match($pattern, $string) > 0) {
       return true;
    }
    return false;
}

Вроде нормально работает.

Проблема в том, что когда массив $stopwords пуст (поэтому плохие слова не указаны), он всегда возвращает истину, например, если пустое значение распознается как плохое слово, и он всегда возвращает истину (я думаю, проблема в том, что это, но может быть, еще один).

Может кто-нибудь помочь мне разобраться с этой проблемой?

Спасибо

Ответы [ 4 ]

6 голосов
/ 07 февраля 2012

Я бы использовал in_array():

function stopWords($string, $stopwords) {
   return in_array($string, explode(',',$stopwords));
}

Это сэкономит некоторое время вместо регулярного выражения.


РЕДАКТИРОВАТЬ: для сопоставления любому слову в строке

function stopWords($string, $stopwords) {
   $wordsArray = explode(' ', $string);
   $stopwordsArray = explode(',',$stopwords);
   return count(array_intersect($wordsArray, $stopwordsArray)) < 1;
}
0 голосов
/ 07 февраля 2012

Если массив $stopwords пуст, то explode(',', $stopwords) оценивается как пустая строка, а $pattern равняется /\b( )\b/i. По этой причине ваша функция возвращает true, если $stopwords пусто.

Самый простой способ исправить это - добавить оператор if, чтобы проверить, массив пуст или нет.

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

Дайте $ stopwords в виде массива

function stopWords($string, $stopwords) {
    //Fail in safe mode, if $stopwords is no array
    if (!is_array($stopwords)) return true;
    //Empty $stopwords means all is OK
    if (sizeof($stopwords)<1) return false;
    ....
0 голосов
/ 07 февраля 2012

Вы можете поставить условие так:

if (!empty ($stopwords)) { your code} else {echo ("no bad words");}

А затем попросите пользователя или приложение ввести несколько плохих слов.

...