Метод раздевания для непробельных символов? - PullRequest
5 голосов
/ 29 марта 2009

Существует ли функция Ruby / Rails, которая удаляет строку определенного пользовательского символа? Например, если я хочу убрать мою строку кавычек "... text ..."

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

Ответы [ 5 ]

2 голосов
/ 26 февраля 2013

Я не знаю, изобретаю ли я здесь заново колесо, поэтому, если вы найдете встроенный метод, который делает то же самое, пожалуйста, дайте мне знать: -)

Я добавил следующее к config/initializers/string.rb, которое добавляет методы trim, ltrim и rtrim в класс 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 голосов
/ 29 марта 2009

Вы можете использовать tr со вторым аргументом в качестве пустой строки. Например:

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

удалит все двойные кавычки.

Хотя, если вы используете эту функцию для очистки вашего ввода или вывода, она, вероятно, не будет эффективной для предотвращения SQL-инъекций или атак на межсайтовый скриптинг. Для HTML вам лучше использовать gem sanitize или функцию помощника вида h.

1 голос
/ 29 марта 2009

Я не знаю ни одного из коробки, но это должно делать то, что вы хотите:

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".
0 голосов
/ 18 мая 2012
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

Ответ Чака нуждается в нескольких знаках +, если вы хотите удалить все лишние экземпляры его строкового шаблона. И это не сработает, если вы хотите удалить любой набор символов, который может появиться в любом порядке.

Например, если мы хотим, чтобы строка не заканчивалась чем-либо из следующего: a, b, c, а наша строка - fooabacab, нам нужно что-то более сильное, как код, который я предоставил выше.

0 голосов
/ 29 марта 2009

Вы можете использовать String # gsub:

%("... text... ").gsub(/\A"+|"+\Z/,'')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...