Rails - 检查字段格式是否有效regex / catch RegexpErrors

时间:2016-10-20 21:19:12

标签: ruby-on-rails ruby regex ruby-on-rails-5

在我的应用中,我将正则表达式存储在一个字段(value_regex)中 - 如何检查该字段是否包含有效的正则表达式?

是否有红宝石功能或正则表达式?

修改

根据以下输入,在我的模型tag.rb中添加了:

validate :valid_regex

和下面的方法(我想扩展另一个正则表达式字段key_regex。首先如何处理异常/错误。我找不到文档sofar:

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并将消息输出为错误(errors.ad?)?

3 个答案:

答案 0 :(得分:1)

如果您将正则表达式存储为字符串,则可以将其转换回常规正则表达式:

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

您可能希望在模型中编写包装器方法:

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

其中matching是具有字符串值的原始列。

答案 1 :(得分:0)

@valid_value_regex ||= Regexp.new(self.value_regex)
rescue => exception
errors.add(:value_regex, exception)

答案 2 :(得分:0)

您必须挽救该异常并将消息放入errors。试试这个:

def valid_regex
  Regexp.new(value_regex.to_s)
rescue RegexpError => e
  errors.add(:value_regex, e.message)
end