2012-02-07 5 views
0

機能私は悪い言葉の一つは、正常に動作するようです配列$stopwordsストップワードは

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

に発見された場合はtrueを返し、この機能を持っています。

問題は、配列$stopwordsが空の場合(悪い単語が指定されていないため)、空の値が不正な単語として認識され、常にtrueを返すような場合は常にtrueを返します。しかし別のものかもしれない)。

誰でもこの問題を解決する手助けはできますか?私はin_array()を使用する

おかげ

答えて

6

:これは、代わりに正規表現のいくつかの時間を節約します

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


EDIT:

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

し、入力にいくつかの悪い言葉をユーザーまたはアプリケーションに尋ねる:あなたはこのように条件を置くことができ、文字列に

function stopWords($string, $stopwords) { 
    $wordsArray = explode(' ', $string); 
    $stopwordsArray = explode(',',$stopwords); 
    return count(array_intersect($wordsArray, $stopwordsArray)) < 1; 
} 
+0

いいです!非常にきれいな! – Mike

+0

これは失敗します:**完全な$文字列**がストップワードである場合にのみ、 'in_array()'がtrueを返します。** $ string **の単語がストップワードの場合 –

+0

@EugenRieck:私は全体の文字列内の単一のオカレンスをチェックするためのソリューションを追加しました – konsolenfreddy

-1

を任意の単語と一致するように、 。 explode(',', $stopwords)が空の文字列に評価し、$pattern/\b()\b/iに等しいよりも、配列$stopwordsは、空の場合

0

は、アレイ

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

として$ストップワードを与えます。これは、$stopwordsが空の場合に関数がtrueを返す理由です。

これを修正する最も簡単な方法は、ifステートメントを追加して、配列が空であるかどうかを確認することです。

関連する問題