В моем приложении я храню регулярное выражение в поле (value_regex) - как я могу проверить, содержит ли поле допустимое регулярное выражение?

Есть ли для этого функция ruby или регулярное выражение?

Редактировать

На основании приведенных ниже данных я добавил в свою модель tag.rb:

validate :valid_regex

И нижеприведенный метод (который я хочу расширить и для другого поля регулярного выражения key_regex. Во-первых, как обрабатывать исключения / ошибки. Мне не удалось найти документацию:

def valid_regex
  unless Regexp.new(value_regex)
    errors.add(:value_regex, "not a valid regular expression")
  end
end

Или проще

def valid_regex
  @valid_regex ||= Regexp.new(self.value_regex)
end

Как отловить RegexpError (s) и вывести сообщение как ошибку (errors.ad?)?

0
Dimitri de Ruiter 21 Окт 2016 в 00:19

3 ответа

Лучший ответ
@valid_value_regex ||= Regexp.new(self.value_regex)
rescue => exception
errors.add(:value_regex, exception)
1
Dimitri de Ruiter 24 Окт 2016 в 07:12

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

string = 'test.*'
Regexp.new(string)
# => /test.*/

Возможно, вы захотите написать в своей модели метод-оболочку:

class Example < ActiveRecord::Base
  def matching_regex
    @matching_regex ||= Regexp.new(self.matching)
  end
end

Где matching - исходный столбец со строковым значением.

1
tadman 20 Окт 2016 в 21:27

Вам нужно будет спасти исключение и поместить сообщение в errors. Попробуй это:

def valid_regex
  Regexp.new(value_regex.to_s)
rescue RegexpError => e
  errors.add(:value_regex, e.message)
end
1
John Cleary 10 Ноя 2017 в 15:19