2011-09-01 5 views
2

정규식 함수에서 모두 개별적으로 나열 할 필요가없는 PHP의 문자열에서 영숫자가 아닌 문자를 모두 쉽게 제거 할 수 있습니까?문자열에서 영숫자가 아닌 문자 (ß, Ê 등)를 제거합니다.

나는 과거에 preg_replace("/[^a-zA-Z0-9\s\'\-]/", "", $my_string);을 사용하고 있지만, 이것은 등 ÀÈÌÒÙß 나는 이름 필드, 그래서 통화 및 수학 문자/기호는 필요하지 않습니다를 소독 할 필요가

같은 중요한 문자를 필터링합니다. 이처럼

+0

어떻게 당신이 중요한 나열된 문자를 수 있지만 ['Þ'] (http://en.wikipedia.org/wiki/Thorn_%28letter%29)? (예를 들면) 또는 다른 사람들의 전체 무리. Mu, Pi 또는 다른 그리스 알파벳의 나머지 부분을 허용하려면? 그리고 엔을 허용한다면, 왜 파운드와 달러가 아닌가? 나는 그 질문을 추측한다. 당신은 어디에서 선을 그어야 하는가? 어떤 캐릭터를 제외시키고 싶은가, 왜 그런가? 'μ'에 적용되지 않는 문자에 대한 특별한 점은 무엇입니까? – Spudley

+0

기술적으로 말하면,'\ p {알파벳}'속성이'\ pL'도 아니고'\ pN'도 아닌 코드 포인트가 몇 개 있습니다. 대부분의 사람들은 영숫자에'[\ pL \ pN]' 특히 PHP가 [UTS # 18 RL1.2] (http://unicode.org/reports/tr18/#Compatibility_Properties)에서 요구하는'\ p {alphabetic} '속성을 호환성 등록 정보에서 지원하는 것으로 보이지 않으므로 특히 그렇습니다. – tchrist

+0

당신은 @ Spudley 맞습니다. 이름 필드를 살균하는 동안 수학 기호 나 화폐 기호를 허용하는 것은 의미가 없으므로이 질문을 수정했습니다. – Citricguy

답변

6

:

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

arnaud576875 이미 언급 한 바와 같이, 당신은 내가했던 것처럼 u 수정을 사용하면 패턴이 UTF-8로 처리됩니다 알고 있어야합니다. appropriate manual page의 관련 발췌 :

U (PCRE8)

이 수정 펄 호환 PCRE의 추가 기능을 사용. 패턴 문자열은 UTF-8로 처리됩니다. 이 수정자는 Unix에서는 PHP 4.1.0 이상에서, PHP에서는 4.2.3에서 사용할 수 있습니다. 패턴의 UTF-8 유효성은 PHP 4.3.5 이후로 확인됩니다.

+0

$ my_string은 utf8이어야합니다. – arnaud576875

+0

@ arnaud576875 : 'u' 수정 자 (PCRE8)는 그 패턴이 UTF-8로 처리되었다는 것을 분명하게 나타내지 만 여러분이 옳습니다. 내 대답을 적절한 심판으로 업데이트 할 것입니다. –

+0

어쨌든 이것을 유지하려면 밑줄을 제거하지 마십시오. – Nathan

1

를 사용하여 유니 코드 범주 :

preg_replace("/[^\pL\pN\p{Zs}'-]/u", "", $my_string); 
+0

'/ u' 한정자도 추가해야합니다. 유니 코드 속성 이스케이프가 어떻게 작동하는지 알 수있는 방법 인 대상 문자열이 정규식 엔진에 UTF-8임을 알립니다. –

+0

@ 앨런 무어 : 네 말이 맞아, 방금 놓쳤습니다. – Toto

+1

@Alan : PCRE 문서에 따르면 패턴을 컴파일 할 때'PCRE_UCP' 옵션을 사용하거나 패턴에'(* UCP)'옵션을 삽입하여이를 수정할 수 있습니다. 필자는 PCRE가 사용하는 옵션을 무엇에 관한 지옥처럼 PHP dodgy를 찾습니다. 예를 들어, [this PHP regex tester page] (http://lumadis.be/regex/test_regex.php)는 추가 작업없이 보통의 유니 코드와 일치하는'\ w'를 가질 것입니다. * "El niño는 훌륭한 카페를 가지고 있습니다."*와'# \ w + # i'를 사용하면'/ u' 또는'(* UCP) '없이 모든 단어를 얻을 수 있습니다. 이것이 완전히 예측할 수 없기 때문에 PHP는 정말 엉망입니다. – tchrist

관련 문제