2012-12-04 7 views
1
)

사용자가 텍스트 영역을 통해 파일 이름을 변경할 수있게했지만 지금은 정규 표현식 문제가 있습니다. 나는 윈도우 7에 대한 참조로PHP 정규식 (

는 이러한 문자은 파일 이름에 허용되지 않습니다

\/: * ? < > |

하지만 고집, 아마도 현명하게,이 특정 문자 만에 ​​정규 표현식을 최소화하기 위해 선택합니다

- _ .

다른 모든 것들은 잘려야합니다.

누군가가이 정규식으로 나를 도와 줄 수 있습니까?

preg_replace이다 제외한 모든 : A-Za-z0-9- _ .

나는 아직도 정말 그것의 묘리를 터득하지 않습니다.

+1

또는 간단한'str_replace();'를 사용하여'' ' – rsz

+3

'[^ A-Za-z0-9 \-.]]와 같은 빈 문자열로 대체 할 수 있습니다. "다음 중 하나가 아닌 것은 ..." –

+1

해봤습니까? * 정규식 파일 이름 *에 대한 Google 검색은 많은 유용한 결과를 제공합니다. – Tchoupi

답변

7
preg_replace('/[^A-Za-z0-9 _ .-]/', '', $filename); 

[]는 문자 클래스이고 ^는 부정합니다. 따라서 문자 그대로 해당 그룹의 문자 이외의 문자와 일치합니다.

-은 끝에 있으며, 다른 곳에서 사용하는 경우 특수 문자이기 때문에 마지막에 있습니다. 0-9

+1

하지만 공백 ????? – Phoenix

+0

그것은 \이어야합니다. 점은 모든 문자를 의미합니다. – Gerfried

3

귀하의 질문에 이미 꽤 많은 문자가 배치되어 있습니다. 그것을 얻으려면 preg_replace()에 연결하기 만하면됩니다.

이 시도 :

$filename = preg_replace('/[^a-zA-Z0-9_.-]/', '', $filename); 

[]로 둘러싸인 문자 집합의 시작 부분에있는 ^는, 하지 문자 -match 목록에 나와 있습니다. 따라서이 행은 "이 아닌 문자를 다음으로 바꾸십시오"라고 읽을 수 있습니다.