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,它很简单,但很有帮助。
我喜欢FriendlyId,自称“瑞士陆军推土机”创造slu </s>。 https://github.com/norman/friendly_id