在Ruby中,我有一個任意字符串,我想將它轉換爲有效的Unix/Linux文件名。不管它的最終形式如何,只要它在視覺上可以識別爲它開始的字符串。一些可能的例子:將Ruby字符串轉換爲* nix文件名兼容字符串
"Here's my string!" => "Heres_my_string"
"* is an asterisk, you see" => "is_an_asterisk_you_see"
是否有什麼內置的(也許在文件庫),將完成此(或接近此)?
在Ruby中,我有一個任意字符串,我想將它轉換爲有效的Unix/Linux文件名。不管它的最終形式如何,只要它在視覺上可以識別爲它開始的字符串。一些可能的例子:將Ruby字符串轉換爲* nix文件名兼容字符串
"Here's my string!" => "Heres_my_string"
"* is an asterisk, you see" => "is_an_asterisk_you_see"
是否有什麼內置的(也許在文件庫),將完成此(或接近此)?
按照你的規範,你可以用正則表達式來替代它。此正則表達式將匹配比基本字母和數字以外的所有字符:
s/[^\w\s_-]+//g
這將消除任何多餘的空格在單詞之間,在你的例子所示:
s/(^|\b\s)\s+($|\s?\b)/\\1\\2/g
最後,替換剩餘空間用下劃線:
s/\s+/_/g
這在Ruby中:
def friendly_filename(filename)
filename.gsub(/[^\w\s_-]+/, '')
.gsub(/(^|\b\s)\s+($|\s?\b)/, '\\1\\2')
.gsub(/\s+/, '_')
end
首先,我發現它純粹是以ruby的方式提出的,其次是它的目的不同(* nix文件名兼容),但如果您使用的是Rails,則有一種方法可以幫助您。
在軌控制檯:
"Here's my string!".parameterize => "here-s-my-string"
"* is an asterisk, you see".parameterize => "is-an-asterisk-you-see"
我認爲,參數化,爲符合URL規範,可以用文件名:)工作以及
你可以看到此處詳細瞭解: http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize
還有很多其他有用的方法。
在大多數Linux文件系統中,文件名中不允許的唯一字符是'\ 0'和'/'。 '*是星號,你看'是一個完全有效的文件名。 – sepp2k
@ sepp2k:好點。在這種情況下,我想創建一個文件,讓其他人可以移動或刪除它們,而不用全部拖拽:) – jrdioko