ruby发表头衔slu </s>

我应该如何将一个post标题转换为Ruby中的slu </s>?

标题可以有任何字符,但我只想让slug允许[a-z0-9-_] (应该允许任何其他字符?)。

所以基本上:

  • 压倒所有的信件
  • 将空格转换为连字符
  • 删除多余的字符

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

小写使得小写。 strip确保没有前导或尾随空白。 第一个gsub用连字符replace空格。 第二个gsub删除所有非alpha非短划线非下划线字符(注意这个集合非常接近\W但也包括短划线,这就是为什么在这里拼写出来的原因)。

这是Rails吗?

 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" 

to_slug是一个很棒的Rails插件,可以处理几乎所有的东西,包括时髦的字符,但是它的实现非常简单。 把它夹在string上 ,你就会被sorting。 下面是精简的来源:

 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 

我用过这个gem,它很简单,但很有帮助。

https://rubygems.org/gems/string_helpers

我喜欢FriendlyId,自称“瑞士陆军推土机”创造slu </s>。 https://github.com/norman/friendly_id