Преобразование строки Ruby в * nix-совместимую с файлами строку
В Ruby у меня есть произвольная строка, и я бы хотел преобразовать ее в то, что является допустимым именем файла Unix/Linux. Не имеет значения, как это выглядит в его окончательной форме, если оно визуально распознается как строка, в которой она начиналась. Некоторые возможные примеры:
"Here my string!" => "Heres_my_string"
"* is an asterisk, you see" => "is_an_asterisk_you_see"
Есть ли что-нибудь встроенное (возможно, в библиотеках файлов), которое выполнит это (или близко к этому)?
Ответы
Ответ 1
По вашим спецификациям вы можете выполнить это с заменой регулярного выражения. Это регулярное выражение будет соответствовать всем символам, кроме основных букв и цифр:
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
Ответ 2
Во-первых, я вижу, что он был задан исключительно в рубине, и во-вторых, это не та же самая цель (* nix filename compatible), но если вы используете Rails, существует метод под названием parameterize
, который должен помочь.
В консоли rails:
"Here 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
Там также много других полезных методов.