Tìm phần mở rộng của tên tệp trong Ruby


103

Tôi đang làm việc trên phần tải lên tệp của ứng dụng Rails. Các loại tệp khác nhau được ứng dụng xử lý khác nhau.

Tôi muốn tạo một danh sách trắng các phần mở rộng tệp nhất định để kiểm tra các tệp đã tải lên để xem chúng sẽ đi đến đâu. Tất cả các tên tệp đều là chuỗi.

Tôi cần một cách để chỉ kiểm tra phần mở rộng của chuỗi tên tệp. Tất cả các tên tệp đều ở định dạng "some_file_name.some_extension".

Câu trả lời:


167

Đó thực sự là những thứ cơ bản:

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
Làm thế nào về "file_with_no_extension".split('.').last?
a'r

12
Thật không may điều này không làm việc cho nhiều giai đoạn hậu tố như tar.gz, tar.bz2.
KomodoDave 12/12/12

2
@KomodoDave không có gì hoạt động đối với các hậu tố nhiều dấu chấm, ngoại trừ cơ sở dữ liệu tiện ích mở rộng (do đó dễ xảy ra lỗi) heuristic.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

4
Bạn muốn làm File.extname("example.png").downcaseđể đảm bảo rằng phần mở rộng không có trong tất cả các mũ
Sam Eaton

@CiroSantilli 六四 事件 法轮功 包 卓 轩 Trừ khi bạn chọn bao gồm bất kỳ thứ gì sau dấu chấm đầu tiên ... nhưng sau đó mọi người tạo tên tệp bằng dấu chấm, vì vậy, cả hai cách đều dễ xảy ra lỗi, hãy đồng ý về điều đó.
Luc

78

Sử dụng extnamephương thức từ lớp Tệp

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

Ngoài ra, bạn có thể cần basenamephương pháp

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

16

Chủ đề khá cũ nhưng đây là cách để loại bỏ dấu chấm phân cách phần mở rộng và các dấu cách ở cuối:

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

Ví dụ:

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

Làm điều này sẽ không dễ dàng hơn để đi xe của dải phân cách mở rộng?

File.extname(path).delete('.')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.