繁体   English   中英

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

[英]Standardize a String for Filename, remove accents and special chars

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

到目前为止我有这个:

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

但第一个问题: - 字符。 我想这种方法存在更多问题。

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

名字是这样的:

  • “Prélèvements - 常规”
  • 《健康证》
  • ...

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

  • “prelevements_routine”
  • “carnet_de_sante”
  • ...

谢谢您的帮助 :)

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

然后,你可以这样做:

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

如果空格没问题,请使用ActiveStorage::Filename#sanitized

如果空格没问题(我建议保留),如果这是用户提供和/或用户可下载的文件,那么您可以使用适用于这种情况的ActiveStorage::Filename#sanitized方法。

它删除了文件名中不允许的特殊字符,同时保留了用户通常用来很好地组织和描述其文件的所有好字符,如空格和 & 符号 (&)。

ActiveStorage::Filename.new( "Prélèvements - Routine" ).sanitized 
#=> "Prélèvements - Routine"

ActiveStorage::Filename.new( "Carnet de santé" ).sanitized 
#=> "Carnet de santé"

ActiveStorage::Filename.new( "Foo:Bar / Baz.jpg" ).sanitized 
#=> "Foo-Bar - Baz.jpg"

如果您想删除几乎所有内容,请使用String#parameterize

如果您真的想删除所有内容,请尝试String#parameterize

"Prélèvements - Routine".parameterize
#=> "prelevements-routine"

"Carnet de santé".parameterize
#=> "carnet-de-sante"

"Foo:Bar / Baz.jpg".parameterize
#=> "foo-bar-baz-jpg"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM