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

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

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

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

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

wr98u20j

wr98u20j1#

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

示例:

与空间

  1. str = "New School"
  2. str.parameterize(separator: '_')
  3. => "new_school"

没有空间

  1. str = "school"
  2. str.parameterize(separator: '_')
  3. => "school"

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

示例:

与空间

  1. str = "New School"
  2. str.parameterize.underscore
  3. => "new_school"

没有空间

  1. str = "school"
  2. str.parameterize.underscore
  3. => "school"
展开查看全部
bkhjykvo

bkhjykvo2#

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

1tuwyuhd

1tuwyuhd3#

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

  1. 1.9.3-p0 :010 > str= " John Smith Beer "
  2. => " John Smith Beer "
  3. 1.9.3-p0 :011 > str.downcase.tr(" ", "_")
  4. => "__john___smith_beer_"

下面的解决方案会更好:

  1. 1.9.3-p0 :010 > str= " John Smith Beer "
  2. => " John Smith Beer "
  3. 1.9.3-p0 :012 > str.squish.downcase.tr(" ","_")
  4. => "john_smith_beer"

squish是Rails提供的一个String方法

pxy2qtax

pxy2qtax4#

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

  1. str.parameterize(separator: '_')

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

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

i7uaboj45#

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

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

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

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

hfwmuf9z6#

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

注:无“!”

deikduxw

deikduxw7#

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

nhaq1z21

nhaq1z218#

  1. str = "Foo Bar"
  2. str.tr(' ','').underscore
  3. => "foo_bar"

相关问题