Подтвердить что ты не робот

Rails 3 - Проверьте, содержит ли строка/текст определенное слово/символ через регулярное выражение в контроллере

Я работаю над механизмом кавычек в своем приложении, где должно быть просто ввести # 26, например, в форме комментария, чтобы процитировать комментарий 26 этой темы.
Чтобы проверить, хочет ли пользователь процитировать один или несколько комментариев, я устанавливаю условие if после моего current_user.comments.build и перед @comment.save.
Но, просто чтобы мой вопрос стал более общим и легче адаптироваться:

if @comment.content.include?(/\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i)

Я хочу что-то вроде этого. Этот пример предназначен для проверки того, содержит ли контент комментариев электронные письма. Но логически я получаю ошибку "не могу преобразовать регулярное выражение в строку".

Как вы можете включить include? метод в рельсах с регулярным выражением? Итак, чтобы проверить, содержит ли текст строку определенного формата регулярного выражения?

Или контроллер является неправильным местом для таких действий регулярного выражения?

4b9b3361

Ответ 1

Я делаю ruby ​​regex'es следующим образом:

stringObj.match(/regex/)

Ответ 2

Там также

if @comment.content =~ /regex/

Если у вас был массив всех предыдущих комментариев @prev_comments и вы хотели заменить их всего одним выстрелом, вы могли бы:

pattern = /#(\d+)/

@comment.content.gsub(pattern) do 
  cur_match = Regexp.last_match
  idx = cur_match[1].to_i - 1
  @prev_comments[idx]
end

Trick использует Regexp.last_match, чтобы получить текущее совпадение, что заставило меня задуматься, было ли это потокобезопасным. Он is, по-видимому.

адаптирован (украден) из ниже общего расширения строки

class String
  def js_replace(pattern, &block)
    gsub(pattern) do |_|
      md = Regexp.last_match
      args = [md.to_s, md.captures, md.begin(0), self].flatten
      block.call(*args)
    end
  end
end

Источник: http://vemod.net/string-js_replace

Ответ 3

Чтобы соответствовать характеру .include?

 stringObj.match(/regex/).present?

Приведёт аналогичные истинные/ложные результаты, если вы используете Rails (или ActiveSupport)