2012-02-07 3 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)); 
} 

.


편집 :

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

나는 두려워서, 실패했다 : ** 완전한 $ string **은 stopword이지만 ** $ string **의 단어가 stopword 인 경우에만 in_array()가 true를 반환한다 –

+0

@EugenRieck : 전체 문자열에서 단일 어커런스를 확인하기위한 솔루션을 추가했습니다. – konsolenfreddy

-1

당신은 다음과 같은 조건을 넣을 수 있습니다 문자열에서 단어와 일치하는 . explode(',', $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

적어 보라의 $의 중지 단어는 빈 문자열로 평가하고 $pattern/\b()\b/i 같습니다. $stopwords이 비어 있으면 함수가 true를 반환하는 이유입니다.

가장 쉬운 방법은 if 문을 추가하여 배열이 비어 있는지 확인하는 것입니다.

0

배열 $stopwords이 비어있는 경우, 같은