Ruby动态正则表达式条件

时间:2016-10-12 06:52:27

标签: ruby-on-rails ruby

我想在控制器(RoR)上制作一个正则表达式。我试过这段代码:

  @widget_check = ClanTemplatesWidget.find(params[:id])
  unless params[:config].blank?
    #@widget_check.config in database value = [{"input":"string","name":"code", "label":"Code clan","validation":"^([#][A-Z0-9]{7})$"}]
    JSON.parse(@widget_check.config).each do |config,i|
     regexp = Regexp.new(config["validation"])
     if regexp.match(params[:config][config["name"]])
       @error = 0
     else
       @error = 1
     end
    end
    @widget.config = params[:config].to_json
  end

有关信息,我的数据在数据库中。如果我检查这两个参数我有:

config [“validation”] = / ^([#] [A-Z0-9] {8})$ /

params [:config] [config [“name”]] = #2YL9GR9R

如果我用数据重写我的代码,它可以正常工作(就像那样):

if /^([#][A-Z0-9]{8})$/.match("#2YL9GR9R")
  @error = 0
else
  @error = 1
end

1 个答案:

答案 0 :(得分:2)

您的config["validation"]包含一个看起来像正则表达式的字符串,但事实并非如此。但是你可以用字符串构建一个正则表达式:

regexp = Regexp.new(config["validation"])
regexp.match(params[:config][config["name"]])

由于Regexp.new需要一个没有周围/.../的字符串,因此您可能只想省略它们。