Rails中的正则表达式问题

问题描述 投票:0回答:1

我正在比较存储在数据库中的预期值的数据类型值与实际响应。我使用下面的代码验证值。我在比较时得到未定义的“string_between_markers”方法错误。我知道在expected_value字符串中没有预定义的方法可用。如何调用string_between_markers进行比较正则表达式。在DB模式中,正则表达式的值低于Pattern_Regex _ [^([0-9] {1,3})。([0-9] {1,3})。([0-9] {1,3})。( [0-9] {1,3})]

     def validate_value? (actual_value)
     if expected_value.include? "Pattern_Regex"
      #   get the regex from []
      regex = expected_value.string_between_markers("[","]")

      if expected_value.match(regex)
        result = "Passed"
       end
      end

        #String Between Method
        def string_between_markers marker1, marker2
     self[/#{Regexp.escape(marker1)}(.*?)#{Regexp.escape(marker2)}/m, 1]
      end
         end
ruby-on-rails
1个回答
0
投票

问题是你在String上调用了一个未正确定义的方法。有两种方法。

第一解决方案

def string_between_markers(input, marker1, marker2)
  input[/#{Regexp.escape(marker1)}(.*)#{Regexp.escape(marker2)}/m, 1]
end

然后像这样调用它:

string_between_markers(expected_value, "[","]")

二解决方案

使用以下代码创建lib/ext/string.rb之类的文件:

class String
  def string_between_markers(marker1, marker2)
    self[/#{Regexp.escape(marker1)}(.*)#{Regexp.escape(marker2)}/m, 1]
  end
end

然后,在您的代码中,您必须通过调用require 'ext/string'或将lib文件夹添加到自动加载路径来要求此文件。

之后,您将像以前一样调用该方法:

expected_value.string_between_markers("[","]")
© www.soinside.com 2019 - 2024. All rights reserved.