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

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

class Product  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 

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

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

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

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

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