2010-03-18 10 views
1

다국어 사이트의 검색 창에서 오는 문자열을 정리하려고합니다.다중 언어 문자열의 허용 목록 이외의 문자를 모두 필터링하는 정규식

일반적으로 내가 좋아하는 정규식 사용합니다 :

$allowed = "-+?!,.;:\w\s"; 
$txt_search = preg_replace("/[^" . $allowed . "]?(.*?)[^" . $allowed . "]?/iu", "$1", $_GET['txt_search']); 

을하고 영어 텍스트를 위해 잘 작동합니다.

그러나 입력 한 텍스트가 다른 언어 (예 : 러시아어, 중국어)로되어있을 때도 동일한 작업을 수행해야합니다.

"일반 텍스트"를 원래 언어로 유지하면서 문자열을 정리하려면 어떻게해야합니까?

하지만 블랙리스트로 전환하는 데는 (비록 내가하지는 않지만 ...)하지만이 순간에는 정규 표현식이 모든 원본 입력을 완전히 파괴합니다.

답변

6

{LN}[\p{L}\p{N}] \ 대신, w를 참조 http://www.php.net/manual/en/regexp.reference.unicode.php

+0

감사합니다. 나는 * 잘못된 UTF-8 문자열을 오프셋 5 *에서 계속 유지합니다. PCRE가 유니 코드 속성으로 컴파일되지 않았을 가능성이 있으며이를 확인할 수 있습니까? 지금 우분투 9.10 데스크탑 서버에서 테스트하고 있습니다. – jeroen

+0

나는 그것을 작동시킬 수는 없지만 다른 서버에서 시도해 보겠다. 아마 로컬 문제 일 것이다. – jeroen

1

그것은이다 일반적인 문제, 러시아어 문자 패턴 승 \ 인식하지 못하는, 그래서 당신은

를 사용할 수있는 $ 허용 = "+, -,?!. \ \ sа-я w"; 당신이 P \ 을 사용할 수 있습니다

+0

는 [а-я] 자신의 UTF-8 번호, 그래서 [50-60000] (번호로 확장되지 않습니다 정확하지 않음)? 그게 정규식에 대한 느린 것이라고 생각합니까? –

+0

문자 클래스 내에서 문자 클래스를 사용할 수 있습니까? – jeroen

+0

Jeroen, 나는 할 수 있지만 "서브 클래스"가 없으므로 "["와 " ] "기호. Answer : fixed : – dchekmarev

관련 문제