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中的方法?那么,检查文本是否包含某个正则表达式格式的字符串?
或者控制器是这种正则表达式操作的错误位置?
小智 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
为了匹配 .include 的性质?
stringObj.match(/regex/).present?
Run Code Online (Sandbox Code Playgroud)
如果您使用 Rails(或 ActiveSupport),会给出类似的正确/错误结果