在url图片扩展中写一个更好的正则表达式

时间:2016-12-15 15:05:21

标签: ruby-on-rails ruby

我正在为url图片扩展名编写正则表达式。

我从身体获取网址并判断网址中是否有图片扩展名。

我希望你判断是否有更好的写作风格

def invalid_extension
  urls = URI.extract(body, %w(http https))
  if urls.map { |x| (x.match(/\.(jpg|jpeg|png|gif|bmp)/)) }.compact.present?
  errors.add(:body, "Invalid extension")
end

1 个答案:

答案 0 :(得分:0)

编写自己的代码的更好方法(假设您只想在有有效图像URI的情况下返回):

def invalid_extension
  image_extensions = %(jpg jpeg png gif bmp)
  URI.extract(body, %w(http, https)) do |uri|
    return if image_extensions.include? URI(uri).body.split('.').last
  end
  errors.add(:body, "Invalid extension")
end

但是,您的代码存在一些问题:

  • 如果body包含多个URI,其中一些不是图像URI,该怎么办? URI.extract方法旨在匹配字符串中的多个 URI。
  • 不确定errors实际引用了什么,这个代码是在模型上下文还是控制器上下文中?