2012-04-25 3 views
5

다음과 같은 방법으로 유효성을 검사해야합니다.정규식을 사용하여 파일 이름 유효성을 검사하십시오.

validateFileName(Editable s) { 
     String filtered_str = s.toString(); 
     if (filtered_str.matches(".*[regexp].*")) { 
      filtered_str = filtered_str.replaceAll("[regxp]", ""); 
      s.clear(); 
      s.append(filtered_str);} 

모든 정규식을 사용하여 잘못된 문자와 공백을 제외해야합니까? 아이디어 만 있으면 당신이 뭔가를 사용할 수있는 문자 나는 ilegal과 공간을 제외 리눅스

+3

Unix 파일 시스템의 파일 이름에 잘못된 문자는'/'(경로 구분자)와'\ 0' (C의 문자열 끝)입니다. – geekosaur

답변

4

을 사용하고 있습니다 : 당신은 문자의 목록에있는 "ilegal"문자를 추가 할 수 있습니다

'^[^*&%\s]+$'

(이 경우 무시합니다 *, &, % 및 공백) \s은 공백입니다! [] 안에있는 ^은 의미하는 정규식 구문의 일부입니다. 이 아닌[] 안에있는 모든 문자와 일치해야합니다.

9

POSIX 호환 운영 체제를 사용하는 경우 파일 이름의 유효한 문자는 -z, AZ, 0-9, 마침표, 밑줄 및 하이픈입니다. 정규식이 일치하는 '불법'문자 그러므로

[^-_.A-Za-z0-9]

부록 될 것이다 : 당신은 완전히 휴대용 파일 이름을하려는 경우입니다. 아래의 Josip의 주석에서 나는 POSIX 자체가 사실상 더 많은 문자를 허용한다.

+0

http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html에서 "이름을 구성하는 바이트는 또는 자를 포함 할 수 없습니다."라고되어 있기 때문에 올바르지 않은 것으로 보입니다. 섹션 3.170 파일 이름. –

+0

아, 네. 나는 ** full ** portable ** 파일 이름을 원한다면 내가 설명한 정규 표현식을 사용하겠다는 답을 명확히해야한다. 이것은 _POSIX 프로그래머 가이드 : Portable UNIX Programs 작성하기 _ Donald Lewine (1991)의 63-64 페이지 책에서 나왔습니다. – Anachronist

+0

그것은 여전히 ​​매우 제한적입니다. 1991 년에는 이해할 수 있지만 요즘은 그렇지 않습니다. 쉼표와 공백은 파일 이름에서 매우 공통적입니다. 그들은 당신이 이것을 적용하면 아마도 불평 할 것이고, 80 년대의 한계에 대한 순응은 반드시 합리적인 근거로 간주되지는 않을 것입니다. –

관련 문제