2011-02-14 4 views
3

요구 사항 : 문자열에는 문자, 숫자 및 공백 만 사용해야합니다.
다른 API에 깨끗한 이름을 전달해야합니다.문자열에 Java의 문자, 숫자 및 공백 만 포함하는 Regexp

구현 : 자바

나는이 내 테스트 케이스의 몇 가지 잘 작동

 
public static String getCleanFilename(String filename) { 
    if (filename == null) { 
     return null; 
    } 
    return filename.replaceAll("[^A-Za-z0-9 ]",""); 
} 

내 요구 사항이 함께했다,하지만 난 어떤 경계 조건, 또는 더 나은 방법을 잃었 알고 싶어 (성능면에서) 그것을 할 수 있습니다.

+2

당신이 **의 유효성을 검사하는 경우 ** 파일 이름, 당신이 안 * * 수정 **. – BoltClock

+0

그래서 "____"'에 무엇을 사용하고 싶습니까? –

+0

이것은 거의 확실하게 사용자를 화나게 할 것입니다. 네거티브를 감지하고 사용자가 입력 할 수있는 것과 입력 할 수없는 것을 알리십시오. –

답변

1

직접 질문하시는 분께는 \t이 실패하고 "공간"으로 전달됩니다. 스위치 \s ([...\s]에 당신이 좋은거야.

여하튼, 당신의 디자인은 아마 대신 임의의 사용자 입력 dicking의 사용자는 허용하고 보정 설명서를하지 않는 것을 알 수 있습니다. 결함이.

편집 :
파일 이름이 문제가되지 않는 경우, 파일 이름의 SHA-2 해시를 가지고 그것을 사용 보장 요구 사항을 충족하기 위해 추가

+0

다른 활동이나 이벤트에서 파일 이름을 직접 고르고 있습니다. 하지만 그래, 사실이야. 파일 이름을 수정하려고하면 어떤 문자가 허용되는지 사용자에게 알려야합니다. 고맙습니다. – sat

+0

filename.replaceAll ("[^ A-Za-z0-9 \\ s]", "");을 사용하고 있습니다. 지금. – sat

2

을 의견 :.. 나는 생각하지 않는다 그 퍼포먼스는 사용자 입력이 취해지는 시나리오에서 문제가된다. 그렇게 오래 걸리지 마라.).

그러나 귀하의 질문에 관하여 : 당신이 당신의 정규식에 추가 +를 추가하여 교체의 수를 줄일 수 있습니다

[^A-Za-z0-9 ]+

+0

문자는'[A-Za-z] '가 아니며 숫자는'[0-9]'가 아닙니다. – tchrist

관련 문제