2011-12-04 3 views
1

두 개 이상의 영숫자가 아닌 문자가있는 경우 문자열의 일부를 대체하려고했습니다.php 2 개 이상의 영숫자가 아닌 경우 대체

부분적으로 작동하지만 밑줄이 있으면 교체 할 수 없습니다.

이것은 내가 시도한 것입니다. -dxs_ s에서

$str = "-dxs_ s"; 

$str = preg_replace('/\W{2,}|\_{2,}/', ' ', $str); 

의 reults은 -dxs s해야한다.

문자열에 영숫자가 아닌 문자가 둘 이상 있으면 어떻게 바꿉니 까?

+0

"전세를"->이 질문에 아무런 편집 버튼 비록 없다 어떤 이유 "문자". – jli

답변

1

간단히

$str = preg_replace('/(\W|_){2,}/', ' ', $str); 

이것이 부분을 "비 단어 또는 밑줄"그룹화되어 수행되고 전체로에 2 + 한정 기호를 적용합니다.

See it in action.

+0

당신의 말은'-dxss'가 될 것입니다.'replacement'가 공백없이 비어있는 경우에만이 경우가됩니까? – david

+0

@ david : Doh! 네, 따옴표 사이의 공간을 보지 못했습니다. 가짜 경보, 미안해! – Jon

+0

당신의 권리, 그것은 여분의 공간을 알아 차리는 것은 다소 어렵다, 고마워! – david

1

\W_ 따라서 당신이 당신의 자신의 캐릭터 클래스가 필요 제외 :

/[^a-zA-Z0-9]{2,}/ 

또는

$result = preg_replace('/[^a-z\d]{2,}/i', ' ', $subject); 
+1

+1 잘 작동합니다. \ W가 밑줄을 제외하는 방법에 대해 설명해 주셔서 감사합니다. – david

관련 문제