2013-07-04 2 views
4

문자열의 왼쪽과 오른쪽에서 영숫자가 아닌 모든 기호를 제거하고 문자열 중간에 기호를 남기고 싶습니다.문자열에서 특수 문자를 자르는 방법은 무엇입니까?

나는 비슷한 질문 here 요청했습니다, 좋은 솔루션입니다 :

$str = preg_replace('/^\W*(.*\w)\W*$/', '$1', $str); 

을 그러나 그것은 또한 등 ąĄćĆęĘ 같은 몇 가지 징후를 제거하며 만약이 여전히 알파벳 표시로는 안된다. 예를 들어 위

는 할 것 :

~~AAA~~ => AAA (OK) 
~~AA*AA~~ => AA*AA (OK) 
~~ŚAAÓ~~ => AA (BAD) 
+0

당신이 아닌 알파 숫자를 말할 때 당신이 아닌 다른 아무 의미 (사용하지 마십시오) 귀하의 의견과 작품에 따라

A-Za-z0-9 – DevZer0

답변

4

이 정규식을 사용하는 동안 유니 코드에 대한 u 플래그를 사용하십시오가.

$str = preg_replace('/^\W*(.*\w)\W*$/u', '$1', '~~ŚAAÓ~~'); 

// str = ŚAAÓ 

하지만이 작동하지 않습니다 :

$str = preg_replace('/^\W*(.*\w)\W*$/', '$1', '~~ŚAAÓ~~'); 
3

당신은 유효한 문자의 목록을 전달하고 목록에없는 모든 문자를 대체하는 기능을 알 수 있습니다 :

$str = preg_replace('/[^a-zA-Z0-9*]+/', '', $str);

을 대괄호는이 범위의 모든 것을 선택한다고 말합니다. 캐럿 (^)은 그렇지 않은 정규식입니다. 그런 다음 유효한 문자 (소문자 a - z, 대문자 a - z, 숫자 0 - 9 및 별표)를 나열합니다. 대괄호 끝에있는 더하기 기호는 0 개 이상의 문자 선택을 의미합니다.

편집 :

이 다음 유지하려는 모든 문자의 목록입니다 경우

$str = preg_replace('/[^ĄąĆ毿ŹźŃńŁłÓó*]+/', '', $str);

관련 문제