Вопрос

Как мне преобразовать заголовок поста в слизняк в 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

Я использовал этот драгоценный камень. Простое, но полезное.

https://rubygems.org/gems/string_heelpers.

Мне нравится FriendlyId, самопровозглашенный «швейцарский армейский бульдозер» создания слизняков. https://github.com/norman/friendly_id.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top