如何删除ruby中的特定字符?

时间:2012-12-12 20:55:40

标签: ruby-on-rails ruby special-characters gsub

已创建记录,例如

Company "Life"

如何对物种进行记录

сompany-life

我使用了参数化,但它变成了:

company-quot-life-quot 

据我了解,.gsub(""", "")不适合实现,因为要创建过多的异常列表

是否有办法以原始格式录制? (以便稍后参数化)

提前感谢!

4 个答案:

答案 0 :(得分:1)

这是一种非Rails方法:

require 'cgi'

str = 'Company "Life"'

puts CGI.unescape_html(str).gsub(/"/, '').gsub(/\s+/, '-').downcase

# => company-life

纯正的正则表达式解决方案:

puts str.gsub(/&\w+;/, '').gsub(/\s+/, '-').downcase
# => company-life

如果你在Rails里面(感谢@nzifnab):

str.gsub(/&\w+;/, '').parameterize

答案 1 :(得分:0)

正如@meager所说,你不应该将数据库中的html编码实体存储起来,它是如何通过"进入的?从理论上讲,这可行:

class Page < ActiveRecord::Base
  before_validation :unescape_entities

  private
  def unescape_entities
    self.name = CGI.unescape_html(name)
  end
end

但是我仍然很好奇name如何在其中首先使用html实体进入那里。你的行动/形式是什么样的?

答案 2 :(得分:-1)

"Company &quot;Life&quot;".html_safe.parameterize

答案 3 :(得分:-1)

"Company &quot;Life&quot;".gsub(/&[^;]+;/, "-").parameterize.downcase
# => "company-life"

首先,gsub摆脱了html实体,然后参数化除了Ascii字母数字(并用短划线替换它们)之外的所有部分,然后是downcase。请注意,“_”也会保留,如果您不喜欢,则需要另外gsub('_', '-')