将Ruby字符串转换为* nix filename兼容的字符串

Ruby中,我有一个任意的字符串,我想把它转换成一个有效的Unix / Linux文件名.只要它在视觉上可识别为起始的字符串,它的最终形式看起来并不重要.一些可能的例子:

"Here's my string!" => "Heres_my_string"
"* is an asterisk, you see" => "is_an_asterisk_you_see"

有什么内置的(也许在文件库中)会完成这个(或者接近这个)?

最佳答案
根据您的规格,您可以使用正则表达式替换完成此操作.该正则表达式将匹配除基本字母和数字之外的所有字符:

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

转载注明原文:将Ruby字符串转换为* nix filename兼容的字符串 - 代码日志