Rails - 检查字段格式是否有效正则表达式/捕获 RegexpErrors

Rails - check if field format is valid regex / catch RegexpErrors

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

是否有 ruby 函数或正则表达式?

编辑

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

validate :valid_regex

和下面的 方法 (我也想扩展另一个正则表达式字段 key_regex。首先如何处理 exceptions/errors。我做不到到目前为止找到文档:

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?)?

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

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

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

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

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

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

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

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