如何用Ruby安全地将所有空格替换为下划线?

r7s23pms  于 2023-10-17  发布在  Ruby
关注(0)|答案(8)|浏览(163)

这适用于任何含有空格的字符串

str.downcase.tr!(" ", "_")

但是没有空格的字符串会被删除
所以“New School”会变成“new_school”,但“color”会变成“",什么都没有!

wr98u20j

wr98u20j1#

将“_”作为参数传递给参数(分隔符:'-')。对于Rails 4及更低版本,使用str.parameterize('_')

示例:

与空间

str = "New School"
str.parameterize(separator: '_')

=> "new_school"

没有空间

str = "school"
str.parameterize(separator: '_')

=> "school"

您也可以通过将下划线链接到参数来解决这个问题。

示例:

与空间

str = "New School"
str.parameterize.underscore

=> "new_school"

没有空间

str = "school"
str.parameterize.underscore

=> "school"
bkhjykvo

bkhjykvo2#

关于TR!说
使用与String#tr相同的规则就地翻译str。返回str,如果没有更改,则返回nil。
我认为如果你使用tr而不使用感叹号,你会得到正确的结果。

1tuwyuhd

1tuwyuhd3#

如果您对snake case中的字符串感兴趣,那么建议的解决方案不太有效,因为您可能会得到连接的下划线和起始/尾随下划线。
例如

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方法

pxy2qtax

pxy2qtax4#

如果您使用的是rails 5及更高版本,

str.parameterize(separator: '_')

注意,这与.parameterize.underscore不完全相同:

"New School 1-2".parameterize( separator: "_" ) #=> "new_school_1-2"
"New School 1-2".parameterize.underscore        #=> "new_school_1_2"
i7uaboj4

i7uaboj45#

老问题了但是...
对于所有空白,您可能需要类似于以下内容的内容:

"hey\t there   world".gsub(/\s+/, '_') # hey_there_world

这将获得制表符和新行以及空格,并替换为单个_
可以修改正则表达式以满足您的需要。例如:

"hey\t there   world".gsub(/\s/, '_') # hey__there___world
hfwmuf9z

hfwmuf9z6#

str.downcase.tr(" ", "_")

注:无“!”

deikduxw

deikduxw7#

也可以使用str.gsub(““,“_”)

nhaq1z21

nhaq1z218#

str = "Foo Bar"
str.tr(' ','').underscore

=> "foo_bar"

相关问题