Ruby帖子标题为slug

时间:2010-11-29 21:40:56

标签: ruby string lowercase gsub

如何将帖子标题转换为Ruby中的slug?

标题可以包含任何字符,但我只想让slug允许[a-z0-9-_](它是否允许任何其他字符?)。

基本上是这样的:

  • 包装所有字母
  • 将空格转换为连字符
  • 删除无关的字符

5 个答案:

答案 0 :(得分:91)

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

答案 1 :(得分:76)

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

downcase将其设为小写。 strip确保没有前导或尾随空格。第一个gsub用连字符替换空格。第二个gsub删除所有非字母非破折号非下划线字符(请注意,此设置非常接近\W,但也包括破折号,这就是为什么在这里拼写出来的。)< / p>

答案 2 :(得分:7)

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

答案 3 :(得分:3)

我已经使用过这个gem.It很简单但很有帮助。

https://rubygems.org/gems/string_helpers

答案 4 :(得分:0)

我喜欢FriendlyId,这是一个自称为“瑞士军队推土机”的创造slu .. https://github.com/norman/friendly_id