标准化文件名的字符串,删除重音和特殊字符

MrY*_*iji 5 ruby regex string ruby-on-rails ruby-on-rails-3

我正在尝试找到一种规范化字符串的方法,将其作为文件名传递.

到目前为止我有这个:

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

但第一个问题: - 性格.我想这种方法存在更多问题.

我不控制名称,名称字符串可以有重音符号,空格和特殊字符.我想删除所有这些,用相应的字母('é'=>'e')替换重音,并用"_"字符替换其余部分.

名字如下:

  • "Prélèvements - Routine"
  • "Carnetdesanté"
  • ...

我希望它们像一个没有空格/特殊字符的文件名:

  • "prelevements_routine"
  • "carnet_de_sante"
  • ...

谢谢您的帮助 :)

Dar*_*evo 10

看一下ActiveSupport::Inflector.transliterate,处理这种字符问题非常有用.在那里阅读:ActiveSupport::Inflector

然后,你可以这样做:

ActiveSupport::Inflector.transliterate my_string.downcase.gsub(/\s/,"_")
Run Code Online (Sandbox Code Playgroud)

  • 不适用于像"xxx l'amour"这样的名字.修复:是添加gsub(/'/,'') (2认同)