단어의 블랙리스트를 검사하기 위해 문자열을 검사하려고합니다. 별표와 같은 특수 문자를 처리하기 위해 preg_quote
을 사용했지만 달러 기호로는 작동하지 않습니다.PHP preg_match 및 preg_quote가 달러 기호와 일치하지 않습니다
$string_to_check = 'wordcontaining$';
$naughty_words = array('wordcontaining$', 'a*differentstring');
if(isset($naughty_words)){
foreach($naughty_words as $word){
if (preg_match('/\b'.preg_quote($word).'\b/i',$string_to_check)) {
var_export(array('found'=> true, 'word'=>$word));
}
}
}
내가
array (
'found' => true,
'word' => 'wordcontaining$',
)
를 반환하는 기대하지만 불행히도 그렇지 않은 : 여기
내가 봤네 테스트입니다.$string_to_check = 'a*differentstring'
을 설정하면 모든 것이 예상대로 작동합니다.
나는 여기 아주 명백한 무엇인가 놓쳤는가?
같은 것을 사용할 필요가
일치하지 않을 수 있습니다 '\ b'이 당신의 정규식에서 무엇을하고 있습니까? – Rikesh
올바르게 입력했음을 기억하면 (예 : 코딩 한 지 오래되었습니다.) 단어 전체를 검색합니다. 즉, 블랙리스트 단어가 더 긴 단어의 중간에 나타나면 일치하지 않습니다. – Josh
\ b는 너비가 0 인 단어 경계입니다 (나는'($ | \ W | ^)'과 동일하다고 생각합니다). preg_quote의 결과를 내보내기하여 달러 기호를 올바르게 이스케이프하는지 확인할 수 있습니까? – Adrian