Конвертировать строку Ruby в * nix-совместимую с именем файла строку - PullRequest
11 голосов
/ 13 июля 2011

В Ruby у меня есть произвольная строка, и я хотел бы преобразовать ее во что-то, что является допустимым именем файла Unix / Linux.Не имеет значения, как он выглядит в окончательном виде, если он визуально распознается как строка, с которой он начинался.Некоторые возможные примеры:

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

Есть ли что-нибудь встроенное (возможно, в файловых библиотеках), которое выполнит это (или близко к этому)?

Ответы [ 2 ]

19 голосов
/ 13 июля 2011

По вашим спецификациям, вы можете сделать это с помощью замены регулярных выражений.Это регулярное выражение будет соответствовать всем символам, кроме основных букв и цифр:

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
3 голосов
/ 04 июня 2015

Во-первых, я вижу, что это было задано чисто в ruby, а во-вторых, что это не та же цель (* совместимость с nix-файлами), но если вы используете 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

Существует также множество других полезных методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...