4

대표적인 하이라이트 코드를 만들고 싶습니다. 그래서 저는 다음과 같은 것을 가지고 있습니다 :PHP-REGEX : 액센트가있는 문자는 액센트가없는 문자와 일치하고 반대의 경우도 마찬가지입니다. 이것을 달성하는 방법?

$valor = preg_replace("/(".$_REQUEST['txt_search'].")/iu", "<span style='background-color:yellow; font-weight:bold;'>\\1</span>", $valor); 

이제 요청 단어는 "josé"와 같을 수 있습니다. 그리고 그것으로, 나는 또한 "jose"또는 "JOSÉ"또는 "José"등을 강조합니다.

이 표현식을 사용하여 "josé"라고 쓰면 "josé"와 "JOSÉ"(그리고 모든 경우 변형)와 일치합니다. 악센트가있는 변형에만 항상 일치합니다. "jose"를 검색하면 "JOSE", "jose", "Jose"와 일치하지만 강조된 단어는 일치하지 않습니다. 그래서 내가 원하는 부분적으로, 내가 대소 문자를 구분하지 않은 악센트와 별도로 악센트가 있기 때문에.

"jose"를 검색하고 "jos", "jos", "José", "JOSE", "JOSÉ", "JoSé"를 강조 표시 할 수 있도록 악센트 (유니 코드) ", ...

단어의 악센트를 바꾸고 싶지 않습니다. 화면에 인쇄 할 때 실제 단어를 볼 필요가 있습니다.

아이디어가 있으십니까?

감사합니다.

답변

9

당신은 다음과 같은 가능한 모든 경기에 가능한 일치를 대체하여 txt_search에 따라 정규식 표현식을 작성하는 함수를 만들려고 할 수 있습니다

function search_term($txt_search) { 
    $search = preg_quote($txt_search); 

    $search = preg_replace('/[aàáâãåäæ]/iu', '[aàáâãåäæ]', $search); 
    $search = preg_replace('/[eèéêë]/iu', '[eèéêë]', $search); 
    $search = preg_replace('/[iìíîï]/iu', '[iìíîï]', $search); 
    $search = preg_replace('/[oòóôõöø]/iu', '[oòóôõöø]', $search); 
    $search = preg_replace('/[uùúûü]/iu', '[uùúûü]', $search); 
    // add any other character 

    return $search; 
} 

그런 다음 당신은 당신의 preg_replace이다에 정규식으로 결과를 사용 .

+0

Awsome! 나는 그렇게하기 위해 많은 메모리를 소비 할 것이라고 생각했지만, 그것은 지옥처럼 빠르게 작동하고, PHP 네이티브가 아니기 때문에 정말 좋은 접근 방법입니다. 놀라운 사람을 일하십시오! 너는 내 하루를 보냈다! 함수에 대해 흥미로울 수 있다고 생각하는 문자를 조금 더 확장 해 주시겠습니까? 감사! – Lightworker

1

[eeÉ]와 같은 포함 경우 검색 문자열을 구문 분석하고 정규식의 패턴을 수정해야 할 수 있습니다. e/E/é/É의 모든 사례를 포괄적 인 [eEéÉ]로 대체하십시오. 다른 모든 경우에도 똑같이하십시오. 따라서 귀하의 예에서 Jose/José/JOSÉ 대신 검색 패턴이 jos[éÉeE]

관련 문제