2011-07-12 17 views
11

Rubyには任意の文字列があり、有効なUnix/Linuxファイル名に変換したいと思っています。それは、それが始まった文字列として視覚的に認識可能である限り、最終的な形でどのように見えるかは重要ではありません。いくつかの可能な例:Ruby文字列を* nixファイル名対応文字列に変換する

これを達成する(またはこれに近い)何か組み込みのファイルライブラリがありますか?

+0

ほとんどのLinuxファイルシステムでは、ファイル名に許されない文字は '\ 0'と'/'です。 '*はアスタリスクです、あなたは'完全に有効なファイル名です。 – sepp2k

+0

@ sepp2k:良い点。その場合、誰かが自分の髪を引き抜くことなく移動または削除することができるファイルを作成したいと思っています:) – jrdioko

答えて

18

あなたの仕様では、これを正規表現の置き換えで行うことができます。この正規表現は、基本的な文字と数字以外のすべての文字にマッチします:あなたの例に示すように

s/[^\w\s_-]+//g 

これは、単語の間に余分な空白を削除します:

s/(^|\b\s)\s+($|\s?\b)/\\1\\2/g 

そして最後に、残りのスペースを置き換えます

s/\s+/_/g 

ここではRubyである:

アンダースコアで
+0

ありがとう。最初の 'gsub'に" i "が必要なのはなぜですか? – jrdioko

+0

ああ、そうではありません。私は '\ w'は' [a-z0-9] 'にしか対応していないと思っていましたが、実際は' [a-zA-Z0-9] 'です。それを指摘してくれてありがとう - 私は私の答えを編集します。 –

+0

これはまた、を削除します。ファイル名とその拡張子の間の時間(ピリオド) – JoshL

2

最初に、純粋にルビーで尋ねられたことが分かりました.2番目は同じ目的ではありませんが(* nixファイル互換)、Railsを使用している場合はparameterizeというメソッドが役に立ちます。レールコンソールで

"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

他にも役立つ方法がたくさんあります。

関連する問題