如何检查字符串是否是图像的有效URL?

时间:2014-03-16 20:49:54

标签: ruby-on-rails-4 uri ruby-2.0 url-validation

我有以下课程:

require 'uri'

class Images

  IMAGE_NOT_FOUND = '/images/no_image.gif'

  attr_accessor :url

  def initialize(parameters = {})
    @url = parameters.fetch(:url, IMAGE_NOT_FOUND)
    @url = IMAGE_NOT_FOUND unless @url =~/^#{URI::regexp}$/
  end

end

URL保留为图片。我已经检查了一些问题并添加了URL验证,但我需要改进验证URLs仅指向图像。如果验证失败,我想使用默认图像显示存在一些问题。

注意,URL的当前验证不适用于相对路径。例如,以下url作为图像源/images/image1.png有效,但当前验证无法识别它。

有人可以使用URI判断这是否可行?

1 个答案:

答案 0 :(得分:2)

假设您只想验证指向图像类型文件的URLs

例如:http://www.xyz.com/logo.pnghttp://www.xyz.com/logo.gifhttp://www.xyz.com/logo.jpg

以下是解决方案:

require 'uri'

class Images

  IMAGE_NOT_FOUND = '/images/no_image.gif'

  attr_accessor :url

  def initialize(parameters = {})
    @url = parameters.fetch(:url, IMAGE_NOT_FOUND)
    @url = IMAGE_NOT_FOUND unless ((File.extname(@url) =~/^(.png|.gif|.jpg)$/ )||(@url =~ /^#{URI::regexp}$/))
  end

end

以上示例仅允许网址指向扩展名为.png or .gif or .jpg的图片,其余部分将设置为IMAGE_NOT_FOUND。如果您愿意,可以添加更多扩展程序。