2012-11-21 3 views
5

文字列を正規化してファイル名として渡す方法を見つけようとしています。ファイル名の文字列を標準化し、アクセント記号と特殊文字を削除する

私はこれまでのところ、これを持っている:

my_string.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n, '').downcase.gsub(/[^a-z]/, '_') 

しかし、最初の問題: - キャラクター。私はこの方法にはもっと問題があると思う。

私は名前を制御しません。名前の文字列にアクセント、空白、特殊文字を持つことができます。私はそれらのすべてを削除し、アクセントを対応する文字( 'é' => 'e')に置き換え、残りを '_'文字で置き換えます。

名前が似ている: "Prélèvements - ルーチン"

  • "カルネ・ド・サンテ"
  • ...

私はにそれらをしたいが、ファイル名ようになりますスペースなし/特殊文字:

  • "prelevements_routine"
  • "carnet_de_sante"
  • ...
  • 助けを

感謝:)

答えて

9

ActiveSupport::Inflector.transliterateを見て、それが文字のこの種の問題を扱うに非常に便利です。そこ読む:ActiveSupport::Inflector

次に、あなたが何か行うことができます:グレート

ActiveSupport::Inflector.transliterate my_string.downcase.gsub(/\s/,"_") 
+0

を...おかげ – harsh4u

+2

を "XXX L'amourが" のような名前では動作しません。修正:gsub(/ '/、' ')を追加することです。 – Alain

関連する問題