Rails 3 - 通过控制器中的regex检查字符串/文本是否包含某个单词/字符

rai*_*nce 20 ruby regex string ruby-on-rails-3

我正在我的应用程序中使用引用机制,例如,应该可以在注释表单中键入#26,以便引用该主题的注释26.
要检查用户是否想要首先引用一个或多个注释,我在current_user.comments.build之后和@ comment.save之前添加了一个if条件.
但是,只是为了使我的问题更通用,更容易适应:

if @comment.content.include?(/\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i)
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西.该示例用于检查评论的内容是否包含电子邮件.但从逻辑上讲,我得到一个"无法将regexp转换为字符串"错误.

你怎么做包括?使用正则表达式的rails中的方法?那么,检查文本是否包含某个正则表达式格式的字符串?

或者控制器是这种正则表达式操作的错误位置?

Ann*_*rom 46

我用这种方式做ruby正则表达式:

stringObj.match(/regex/)
Run Code Online (Sandbox Code Playgroud)


小智 9

还有

if @comment.content =~ /regex/
Run Code Online (Sandbox Code Playgroud)

如果你有一个以前所有评论的数组@prev_comments并希望一次性替换它们,你可以:

pattern = /#(\d+)/

@comment.content.gsub(pattern) do 
  cur_match = Regexp.last_match
  idx = cur_match[1].to_i - 1
  @prev_comments[idx]
end
Run Code Online (Sandbox Code Playgroud)

Trick正在使用Regexp.last_match来获取当前匹配,这让我想知道它是否是线程安全的.显然,这.

从下面更一般的String扩展中改编(被盗)

class String
  def js_replace(pattern, &block)
    gsub(pattern) do |_|
      md = Regexp.last_match
      args = [md.to_s, md.captures, md.begin(0), self].flatten
      block.call(*args)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

资料来源:http://vemod.net/string-js_replace


Car*_*ela 6

为了匹配 .include 的性质?

 stringObj.match(/regex/).present?
Run Code Online (Sandbox Code Playgroud)

如果您使用 Rails(或 ActiveSupport),会给出类似的正确/错误结果