2012-08-09 4 views
0

나쁜 단어를 확인하는 기능이 있지만 원하는 방식으로 작동하지 않습니다. 예를 들어 테스트는 오스틴 단어였습니다. 그런 다음 "테스트"라고 말하면 기능은 오스카 단어로 간주됩니다. 내가 어떻게 그렇게하지 않을 수 있도록 고칠 것이라고.문자열 내에서 금지 단어 검색

function censor($message) { 
     $badwords = $this->censor; //array with the cuss words. 
     $message = @ereg_replace('[^A-Za-z0-9 ]','',strtolower(' '.$message.' ')); 
     foreach($badwords as $bad) { 
      $bad = trim($bad); 
      if(strpos($message.' ', $bad.' ')!==false) { 
       if(strlen($bad)>=2) { 
        return true; 
       } 
      } 
     } 
    } 
+0

사용 \의 B :


당신도 내가 예 2에서 PHP의 preg_replace 문서의 복사 한 아래 코드 같은 것을 사용할 수 있습니다. 단어 경계와 일치합니다. – HappyTimeGopher

+0

'ereg_' 함수는 이유 때문에 사용되지 않습니다. '@'를 사용하여주의 사항을 표시하지 않는다고해서 조금 낫지는 않습니다. 'preg_' 기능으로 전환하십시오. – kapa

+0

@HappyTimeGopher 어디에서 추가 할 수 있습니까? – user1588878

답변

2

첫째, ereg_replace는 PHP 5.3.0부터 배제되었습니다

여기 내 코드입니다.

자, 질문에 : \b을 단어 경계로 사용할 수 있습니다.

은 간단히 말해 : \b 당신이 "전체 단어 만" \bword\b의 형태로 정규 표현식을 사용하여 검색을 수행 할 수 있습니다.

자세한 내용은 this page을 참조하십시오. (시작과 끝) 정규식에

$string = 'The quickest brown fox jumped over the lazy dog.'; 
$patterns = array(); 
$patterns[0] = '/ quick /'; 
$patterns[1] = '/ brown /'; 
$patterns[2] = '/ fox /'; 

echo preg_replace($patterns, ' *** ', $string); 

Output: The quickest *** *** jumped over the lazy dog. 
+0

줄을 추가 할 수 있는지 알려주실 수 있습니까? – user1588878