如何将帖子标题转换为Ruby中的slug?
标题可以包含任何字符,但我只想让slug允许[a-z0-9-_]
(它是否允许任何其他字符?)。
基本上是这样的:
答案 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很简单但很有帮助。
答案 4 :(得分:0)
我喜欢FriendlyId,这是一个自称为“瑞士军队推土机”的创造slu .. https://github.com/norman/friendly_id