在我的应用中,我将正则表达式存储在一个字段(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?)?
答案 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