非空白字符的条带方法?

时间:2009-03-29 09:12:10

标签: ruby-on-rails ruby string

是否有Ruby / Rails函数会删除某个用户定义字符的字符串?例如,如果我想删除我的引号“... text ...”

http://api.rubyonrails.org/classes/ActiveSupport/Multibyte/Chars.html#M000942

5 个答案:

答案 0 :(得分:2)

您可以将tr与第二个参数一起用作空字符串。例如:

%("... text... ").tr('"', '')

将删除所有双引号。

虽然如果您使用此功能来清理输入或输出,那么它可能无法有效防止SQL注入或跨站点脚本攻击。对于HTML,最好使用gem sanitize或视图助手函数h

答案 1 :(得分:2)

我不知道我是否在这里重新发明轮子,所以如果你找到同样的内置方法,请告诉我: - )

我将以下内容添加到config/initializers/string.rb,将trimltrimrtrim方法添加到String类中。

# in config/initializers/string.rb
class String
  def trim(str=nil)
    return self.ltrim(str).rtrim(str)
  end

  def ltrim(str=nil)
    if (!str)
      return self.lstrip
    else
      escape = Regexp.escape(str)
    end

    return self.gsub(/^#{escape}+/, "")
  end

  def rtrim(str=nil)
    if (!str)
      return self.rstrip
    else
      escape = Regexp.escape(str)
    end

    return self.gsub(/#{escape}+$/, "")
  end
end

我这样用它:

"... hello ...".trim(".") => “你好”

"\"hello\"".trim("\"") => “你好”

我希望这会有所帮助: - )

答案 2 :(得分:1)

我不知道开箱即用,但这应该做你想要的:

class String
  def strip_str(str)
    gsub(/^#{str}|#{str}$/, '')
  end
end

a = '"Hey, there are some extraneous quotes in this here "String"."'
puts a.strip_str('"') # -> Hey, there are some extraneous quotes in this here "String".

答案 3 :(得分:0)

您可以使用String#gsub:

%("... text... ").gsub(/\A"+|"+\Z/,'')

答案 4 :(得分:0)

class String
    # Treats str as array of char
  def stripc(str)
    out = self.dup
    while str.each_byte.any?{|c| c == out[0]}
        out.slice! 0
    end
    while str.each_byte.any?{|c| c == out[-1]}
        out.slice! -1
    end
    out
  end
end

如果要删除所有其字符串模式的额外实例,Chuck的答案需要一些+符号。如果你想删除任何可能以任何顺序出现的字符集,它就不起作用。

例如,如果我们想要一个字符串不以以下任何一个结尾:a, b, c,而我们的字符串是fooabacab,我们需要更强大的东西,就像我上面提供的代码一样。< / p>