这适用于其中包含空格的任何字符串
str.downcase.tr!(" ", "_")
但是没有空格的字符串只会被删除
因此,“新学校”将变为“ new_school”,但“颜色”将为“”,什么都没有!
Answers:
有空间
str = "New School"
str.parameterize.underscore
=> "new_school"
没有空间
str = "school"
str.parameterize.underscore
=> "school"
编辑:-我们也可以将'_'作为参数进行参数化。
有空间
str = "New School"
str.parameterize('_')
=> "new_school"
没有空间
str = "school"
str.parameterize('_')
=> "school"
编辑:
对于Rails 5及更高版本,请使用 str.parameterize(separator: '_')
parameterize
转换的空间将超过空格-许多特殊字符也会被转换。目的parameterize
是使字符串对URL友好。
String#parameterize
Ruby中没有。有String#parameterize
在Rails的,虽然。
str.parameterize(separator: '_')
。
如果您有兴趣获取蛇形字符串,那么建议的解决方案不太有效,因为您可能会得到串联的下划线和开始/结尾的下划线。
例如
1.9.3-p0 :010 > str= " John Smith Beer "
=> " John Smith Beer "
1.9.3-p0 :011 > str.downcase.tr(" ", "_")
=> "__john___smith_beer_"
下面的解决方案将更好地工作:
1.9.3-p0 :010 > str= " John Smith Beer "
=> " John Smith Beer "
1.9.3-p0 :012 > str.squish.downcase.tr(" ","_")
=> "john_smith_beer"
squish是Rails提供的String方法
str.downcase.split.join('_')
如果#squish不可用,我认为这也可以工作;)
str.gsub! /\s/, '_'