2009-10-29 5 views
1
$test = "!!! sdfsdf sd$$$fdf ___"; 
$test = str_replace(' ', '_', $test); // Turn all spaces into underscores. 
echo $test."<br />"; // Output: !!!___sdfsdf___sd$$$fdf______ 

$test = preg_replace('/[^a-zA-Z0-9_-]/', '-', $test); // Replace anything that isn't alphanumeric, or _-, with a hyphen. 
echo $test."<br />"; // Output: !!!___sdfsdf___sd---fdf______ 

$test = preg_replace('/([_-])\1+/', '$1', $test); // Reduce multiple _- in a row to just one. 
echo $test."<br />"; // Output: !_sdfsdf_sd-fdf_ 

위의 코드는 현재 내가 가지고있는 것으로, REGEX를 알아 내려고하는 것은 끝에서 영숫자가 아닌 문자를 어떻게 잘라내는지입니다. 따라서 최종 출력을 "! _sdfsdf_sd-fdf_"에서 "sdfsdf_sd-fdf"로 변경하십시오.REGEX (PHP에서) .. 끝에서 영숫자가 아닌 문자를 제거 하시겠습니까?

답변

2

당신은 trim() 사용할 수 있습니다 : "!"

$test = trim($test, '_-'); 
echo $test; 

첫 번째 정규 표현식을 지나치지 않게합니다.

+0

와우, 고마워. 나는 트림을 잊어 버린 것을 믿을 수 없다. – nkspartan

3
$clean = preg_replace('~(^[^a-z0-9]+)|([^a-z0-9]+$)~i', '', $str); 
1
[a-zA-Z0-9].*[a-zA-Z0-9] 

의미 : 다음, 우리가 할 수있는 아무것도 많이 읽고 우리가 마지막에 적어도 하나 개의 영숫자를 얻을 수 있는지 확인하고, 영숫자 문자를 읽어들입니다.

2

이 당신의 전체 코드를 대체 할 수

$test = preg_replace('/[^a-zA-Z0-9]+/', '_', $test); 
$test = trim($test, '_'); 

첫 번째는 _ 하나 개 이상의 잘못된 문자의 모든 항목을 대체하고 두 번째는 시작과 끝에서 남아있는 _을 rmove 것입니다.

관련 문제