Как сделать строку Ruby безопасной для файловой системы?

У меня есть пользовательские записи как имена файлов. Конечно, это не хорошая идея, таким образом, я хочу отбросить все кроме [a-z], [A-Z], [0-9], _ и -.

Например:

my§document$is°°   very&interesting___thisIs%nice445.doc.pdf

должен стать

my_document_is_____very_interesting___thisIs_nice445_doc.pdf

и затем идеально

my_document_is_very_interesting_thisIs_nice445_doc.pdf

Существует ли хороший и изящный путь к тому, чтобы сделать это?

43
задан marcgg 21 December 2009 в 10:26
поделиться

1 ответ

Из http://devblog.muziboo.com/2008/06/17/attachment-fu-sanitize-filename-regex-and-unicode-gotcha/ :

def sanitize_filename(filename)
  returning filename.strip do |name|
   # NOTE: File.basename doesn't work right with Windows paths on Unix
   # get only the filename, not the whole path
   name.gsub!(/^.*(\\|\/)/, '')

   # Strip out the non-ascii character
   name.gsub!(/[^0-9A-Za-z.\-]/, '_')
  end
end
28
ответ дан 26 November 2019 в 22:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: