Ruby에서 파일 이름의 확장자 찾기


103

Rails 앱의 파일 업로드 부분을 작업 중입니다. 다른 유형의 파일은 앱에서 다르게 처리됩니다.

업로드 된 파일이 어디로 가야하는지 확인하기 위해 특정 파일 확장자의 허용 목록을 만들고 싶습니다. 모든 파일 이름은 문자열입니다.

파일 이름 문자열의 확장자 부분 만 확인하는 방법이 필요합니다. 파일 이름은 모두 "some_file_name.some_extension"형식입니다.

답변:


167

정말 기본적인 것입니다.

irb(main):002:0> accepted_formats = [".txt", ".pdf"]
=> [".txt", ".pdf"]
irb(main):003:0> File.extname("example.pdf") # get the extension
=> ".pdf"
irb(main):004:0> accepted_formats.include? File.extname("example.pdf")
=> true
irb(main):005:0> accepted_formats.include? File.extname("example.txt")
=> true
irb(main):006:0> accepted_formats.include? File.extname("example.png")
=> false

4
어때요 "file_with_no_extension".split('.').last?
a'r

12
안타깝게도 tar.gz,, 같은 여러 기간 접미사에는 작동하지 않습니다 tar.bz2.
KomodoDave

2
@KomodoDave는 휴리스틱 (따라서 오류가 발생하기 쉬운) 확장 데이터베이스를 제외하고는 다중 기간 접미사에 대해 작동하지 않습니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

4
File.extname("example.png").downcase확장이 모두 대문자가 아닌지 확인 하고 싶을 것입니다.
Sam Eaton

@CiroSantilli 六四 事件 法轮功 包 卓 轩 첫 번째 점 뒤에 아무것도 포함하지 않는 한 ...하지만 사람들은 점으로 파일 이름을 생성하므로 어느 쪽이든 오류가 발생하기 쉽습니다.
Luc

78

extnameFile 클래스의 사용 방법

File.extname("test.rb")         #=> ".rb"

또한 basename방법 이 필요할 수 있습니다.

File.basename("/home/gumby/work/ruby.rb", ".rb")   #=> "ruby"

16

꽤 오래된 주제이지만 확장 구분 기호와 가능한 후행 공백을 제거하는 방법은 다음과 같습니다.

File.extname(path).strip.downcase[1..-1]

예 :

File.extname(".test").strip.downcase[1..-1]       # => nil
File.extname(".test.").strip.downcase[1..-1]      # => nil
File.extname(".test.pdf").strip.downcase[1..-1]   # => "pdf"
File.extname(".test.pdf ").strip.downcase[1..-1]  # => "pdf"

0

확장 분리기를 타는 것이 더 쉬울까요?

File.extname(path).delete('.')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.