Руби сообщение заголовок для пули - PullRequest
44 голосов
/ 30 ноября 2010

Как мне преобразовать заголовок сообщения в слаг в Ruby?

В заголовке могут быть любые символы, но я хочу, чтобы слаг разрешал [a-z0-9-_] (Должен ли он разрешать любые другие символы?).

Таким образом, в основном:

  • заглавные буквы
  • преобразование пробелов в дефисы
  • удаление посторонних символов

Ответы [ 5 ]

93 голосов
/ 30 ноября 2010

Это Рельсы?

string.parameterize

Вот и все.Для еще более сложной порции см. ActsAsUrl .Это может сделать следующее:

"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"
77 голосов
/ 30 ноября 2010
slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')

downcase делает его строчным. strip обеспечивает отсутствие начальных или конечных пробелов. Первый gsub заменяет пробелы дефисами. Второй gsub удаляет все не-альфа-не черточные и не подчеркивающие символы (обратите внимание, что этот набор очень близок к \W, но включает и черточку, именно поэтому он прописан здесь).

7 голосов
/ 30 ноября 2010

to_slug - это отличный плагин Rails, который обрабатывает практически все, включая забавные символы, но его реализация очень проста. Наденьте его на String , и вы будете отсортированы. Вот источник, сжатый вниз:

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
3 голосов
/ 19 октября 2012

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

https://rubygems.org/gems/string_helpers

0 голосов
/ 30 ноября 2010

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

...