验证网址| 预先http://

Dru*_*Dru 2 ruby regex model-view-controller ruby-on-rails ruby-on-rails-3

我想检查用户提交的URL与正则表达式,如果url不以http://或https://开头,那么我想先将http://添加到开头然后保存它.

我有一些代码,但我不知道如何将它合并到我的应用程序中.这段代码会起作用吗?并且我会在允许用户创建链接之前将其合并到我的应用程序中以检查URL.

我已经附上了下面的代码和文件.谢谢

def add_http(link)
  if (link =~ /http[s]?:\/\//)
    link
  else
    "http://#{link}"
  end
end
Run Code Online (Sandbox Code Playgroud)

控制器https://gist.github.com/1279576

_form https://gist.github.com/1279580

型号https://gist.github.com/1279582

Dru*_*Dru 8

修改了一下代码.这有效

  before_save do |link|
      link.url = "http://#{url}" unless link.url=~/^https?:\/\//
  end 
Run Code Online (Sandbox Code Playgroud)

感谢@bandito和@rubyprince的指导

  • `before_create`只会在`创建'记录的情况下检查url.最好使用`before_save`,它将在`create`和`update`之前调用. (4认同)

ban*_*ito 6

您可以将它放在模型中

class Link < ActiveRecord::Base
  attr_accessible :title, :url
  before_save :sanitize_url

  private 
  def sanitize_url
    if url_changed?
     url = "http://#{url}" unless url =~ /^https?:\/\//
    end
  end 
end
Run Code Online (Sandbox Code Playgroud)


Chr*_*ung 5

这个想法很好.我会这样写,但是:

def add_http uri
  uri =~ %r(https?://) ? uri : "http://#{uri}"
end
Run Code Online (Sandbox Code Playgroud)

更简单,没有倾斜的牙签!:-D