2009-09-23 2 views
-1

다중 언어 응용 프로그램에서 preg_replace ('/ [^ a-zA-Z0-9 \ s -_] /', '', $ val)를 사용하면 악센트 부호가있는 문자 또는 러시아 문자 ? 그렇지 않은 경우 위의 문자 만 허용하고 로캘 인식 기능을 사용하려면 사용자 입력을 필터링 할 수 있습니까?로케일 인식은 PHP에서 preg_replace입니다.

감사합니다.

codecowboy.

답변

1

내가 찾을 수있는 유일한 유용한 정보 상태 this page of the manual에서있다 :

A "단어"문자는 언어의 모든 문자/숫자 일치하려면 unicode properties of the regex engine는 사용할 필요가 어떤 문자 또는 숫자 또는 밑줄 문자 즉, 펄의 "단어"일부가 될 수있는 문자입니다. 문자의 정의는 PCRE의 문자 테이블로 제어되며 로케일 특정 일치가 인 경우 일 수 있습니다. 예를 들어, "fr" (프랑스어) 로켈에서 128보다 큰 문자 코드는 악센트 부호가있는 문자에 사용되며 \ w와 일치합니다.

그럼에도 불구하고, 나는

... 당신이 원하는대로 작동하지만 것 내기 않을 것 확인하기 위해 :

  • 어쩌면 unicode matching를 사용하는 것이 더 좋을 것이다
  • 당신은거야 아마 확실하게하려고 노력해야 할 것입니다 ...

유니 코드에 관해서는 설명서에 다음과 같이 쓰여 있습니다 :

PCRE는 천 십오 문자 데이터를 포함하는 구조를 검색 할 수 을 가지고 있기 때문에 유니 코드 속성에 의해 6,

일치하는 문자는 빠른 아니다. 그렇기 때문에 \ d 및 \ w와 같은 전통적인 이스케이프 시퀀스는 PCRE에서 유니 코드 속성을 사용하지 않습니다.

그래서, 내가 ^^

을 추가해야합니다 ... 그것에 대해 호기심 안전의 솔루션이 될 수 있습니다
0

아니요, 아니요, ASCII 문자 A-Z 만 일치합니다.

preg_replace('/[^\p{L}\p{N}]/', '', $string);