使用Regex和Before_Save删除电子邮件地址

时间:2012-02-01 15:35:17

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

尝试在我的Post模型中使用before_save然后使用正则表达式替换任何看起来像电子邮件的单词'forbidden'。这是为了减少用户在讨论区中创建的评论/帖子中的垃圾邮件。

它目前给我一个语法错误;但我相信它不止于此?我该如何解决?

Post.rb

  before_save :remove_emails

  # Prevents and replaces any emails or URLs posted by user as <forbidden>
  def remove_emails
    self.post = post.gsub^(((ht|f)tp(s?))\://)?(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\;\?\'\\\+&amp;%\$#\=~_\-]+))*$, "forbidden")
  end

3 个答案:

答案 0 :(得分:2)

根据doc

  1. 没有gsub^功能。您必须使用gsubgsub!
  2. 模式(第一个参数)应该用'/'(斜杠)
  3. 包围

答案 1 :(得分:1)

在gsub之后删除^。

答案 2 :(得分:1)

this question中发布的Regexp进行一些调整后,您可以尝试:

# Prevents and replaces any emails or URLs posted by user as <forbidden>
def remove_emails
  self.post.gsub!(/(http|https):\/\/[a-z0-9-\.]+([\-\.]{1}[a-z0-9-\.]+)*[a-z]{2,5}\S*/i, 'forbidden')
end