在Ruby中我有一个任意字符串,我想将它转换为有效的Unix / Linux文件名。它的最终形式看起来并不重要,只要它在视觉上可识别为它开始的字符串。一些可能的例子:
"Here's my string!" => "Heres_my_string"
"* is an asterisk, you see" => "is_an_asterisk_you_see"
是否有内置的(可能在文件库中)可以完成此任务(或接近于此)?
答案 0 :(得分:19)
根据您的规格,您可以通过正则表达式替换来实现此目的。此正则表达式将匹配基本字母和数字以外的所有字符:
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
答案 1 :(得分:2)
首先,我看到它纯粹是在红宝石中被问到,其次是它的目的不同(* nix filename兼容),但是如果你使用的是Rails,那么有一个名为parameterize
的方法应该有帮助
在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
还有很多其他有用的方法。