Ruby post title to slug Ruby post title to slug ruby ruby

Ruby post title to slug


Is this Rails? (works in Sinatra)

string.parameterize

That's it. For even more sophisticated slugging, see ActsAsUrl. It can do the following:

"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"


slug = title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '')

downcase makes it lowercase. The strip makes sure there is no leading or trailing whitespace. The first gsub replaces spaces with hyphens. The second gsub removes all non-alpha non-dash non-underscore characters (note that this set is very close to \W but includes the dash as well, which is why it's spelled out here).


to_slug is a great Rails plugin that handles pretty much everything, including funky characters, but its implementation is very simple. Chuck it onto String and you'll be sorted. Here's the source condensed down:

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  endend