将 Ruby 字符串转换为 *nix 文件名兼容字符串

问题描述 投票:0回答:3

在 Ruby 中,我有一个任意字符串,我想将其转换为有效的 Unix/Linux 文件名。它的最终形式是什么样子并不重要,只要它在视觉上可以识别为它开始时的字符串即可。一些可能的例子:

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

有没有内置的东西(可能在文件库中)可以完成这个(或接近这个)?

ruby string filenames
3个回答
23
投票

根据您的规范,您可以通过正则表达式替换来完成此操作。此正则表达式将匹配除基本字母和数字之外的所有字符:

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

10
投票

首先,我看到它纯粹是在 ruby 中询问的,其次它的目的不同(*nix 文件名兼容),但如果您使用 Rails,有一个名为

parameterize
的方法应该会有所帮助。

在导轨控制台中:

"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

还有很多其他有用的方法。


0
投票

使用扎鲁宝石

Zaru.sanitize! "  what\ēver//wëird:user:înput:"
# => "whatēverwëirduserînput"

Zaru.sanitize!("* is an asterisk, you see")
# => " is an asterisk, you see" 
© www.soinside.com 2019 - 2024. All rights reserved.