Ruby Post название TO Slug
Вопрос
Как мне преобразовать заголовок поста в слизняк в Ruby?
Название может иметь какие -либо персонажи, но я хочу, чтобы только слизняк разрешил [a-z0-9-_]
(Должен ли это разрешить любые другие символы?).
Так что в основном:
- Нижнешны все буквы
- преобразовать пространства в дефиса
- Удалить посторонние символы
Решение
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')
downcase
делает это строчным. То strip
Убедится, что нет ведущих или конечных пробелов. Первое gsub
Заменяет пробелы с дефисами. Второй gsub
Удаляет все не-альфа-не-приборные не подчеркивает символы не подчеркивают (обратите внимание, что этот набор очень близко к \W
но также включает в себя черту, поэтому она здесь написана).
Другие советы
Это рельсы?
string.parameterize
Вот и все. Для еще более изощренного пробивания, см. Актсасурл. Анкет Это может сделать следующее:
"rock & roll".to_url => "rock-and-roll"
"$12 worth of Ruby power".to_url => "12-dollars-worth-of-ruby-power"
"10% off if you act now".to_url => "10-percent-off-if-you-act-now"
"kick it en Français".to_url => "kick-it-en-francais"
"rock it Español style".to_url => "rock-it-espanol-style"
"tell your readers 你好".to_url => "tell-your-readers-ni-hao"
to_slug это отличный плагин Rails, который обрабатывает практически все, в том числе фанки, но его реализация очень проста. Брось на это Нить И вы будете отсортированы. Вот источник, сжатый:
String.class_eval do
def to_slug
value = self.mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n, '').to_s
value.gsub!(/[']+/, '')
value.gsub!(/\W+/, ' ')
value.strip!
value.downcase!
value.gsub!(' ', '-')
value
end
end
Я использовал этот драгоценный камень. Простое, но полезное.
Мне нравится FriendlyId, самопровозглашенный «швейцарский армейский бульдозер» создания слизняков. https://github.com/norman/friendly_id.