提供的正则表达式使用多行锚点(^或$)

Mez*_*bah 12 regex ruby-on-rails ruby-on-rails-4

我尝试编写一个图像验证格式,确保url以.png,.jpg或.gif结尾.

class Product < ActiveRecord::Base

  mount_uploader :image_url

  validates :title, :presence => true,
            :uniqueness => true
  validates :image_url, :presence => true,
                        :format => {
                           :with => %r{\.(gif|jpg|png)$}i,
                           :message => 'must be a URL for GIF, JPG or PNG image.'
                        }
end
Run Code Online (Sandbox Code Playgroud)

但是,当我启动我的服务器.看到这个:

提供的正则表达式使用多行锚点(^或$),这可能会带来安全风险.你的意思是使用\ A和\ z,还是忘了添加:multiline => true选项?

Sea*_*ill 16

^并且$都是线锚.如果用户要传入一个字符串http://www.foo.com/bar.png\nfoo_bar_baz!,那么你的正则表达式会说输入有效,因为它将与.png换行符匹配,这不是你想要的.

将上面的正则表达式更改为%r{\.(gif|jpg|png)\z}i相反.这\z是字符串锚点的结束,这是你想要的而不是行结束锚点.

另一个非常相似的问题有一些很好的答案:Ruby正则表达式中\ A\z和^ $之间的区别.

  • 雅虎!! 它的工作.非常感谢.:) (2认同)