Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何用ruby安全地用下划线替换所有空格?_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 如何用ruby安全地用下划线替换所有空格?

Ruby on rails 如何用ruby安全地用下划线替换所有空格?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,这适用于任何包含空格的字符串 str.downcase.tr!(" ", "_") 但是没有空格的字符串会被删除 所以“新学校”会变成“新学校”,但“颜色”会变成“”,没什么 say的文档 使用与String#tr相同的规则就地转换str。如果未进行任何更改,则返回str或nil 我想如果你不使用感叹号,你会得到正确的结果 str.downcase.tr(" ", "_") 注意:没有“!”您也可以这样做 str.gsub(“,”)如果您对输入字符串感兴趣,那么建议的解决方案不太管用,因为您

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

str.downcase.tr!(" ", "_")
但是没有空格的字符串会被删除

所以“新学校”会变成“新学校”,但“颜色”会变成“”,没什么

say的文档

使用与String#tr相同的规则就地转换str。如果未进行任何更改,则返回str或nil

我想如果你不使用感叹号,你会得到正确的结果

str.downcase.tr(" ", "_")
注意:没有“!”

您也可以这样做
str.gsub(“,”)

如果您对输入字符串感兴趣,那么建议的解决方案不太管用,因为您可能会得到串联下划线和起始/结尾下划线

比如说

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提供的字符串方法

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

=> "foo_bar"
有空间

没有空间

编辑:- 我们还可以将‘‘’作为参数传递给参数化

有空间

没有空间

编辑

对于Rails 5和更高版本,请使用
str.parameterize(分隔符:'.')
旧问题,但是

对于所有的空白,您可能需要更像这样的内容:

"hey\t there   world".gsub(/\s+/, '_') # hey_there_world
这将获取制表符、新行和空格,并替换为单个
\uu

正则表达式可以根据您的需要进行修改。例如:

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

如果您使用的是rails 5及更高版本,那么您可以通过

str.parameterize(separator: '_')

不要相信我的话,但我认为这是
str.gsub/\s/,''.'
I figure
str.downcase.split.join('.''.
也可以在“squish”不可用的情况下工作;)小心点
parameterize
将转换多个空格--许多特殊字符也将被转换。
parameterize
的目的是使字符串URL友好。注意,Ruby中没有
string#parameterize
。不过,Rails中有
String#parameterize
。parameterize不再接受参数。在Rails 5上,使用
str.parameterize(分隔符:'.')
。事实上,
更改调用它的内容,而没有
它返回一个新字符串
str = "school"
str.parameterize('_')

=> "school"
"hey\t there   world".gsub(/\s+/, '_') # hey_there_world
"hey\t there   world".gsub(/\s/, '_') # hey__there___world
str.parameterize(separator: '_')