我尝试编写一个图片验证格式,确保网址以.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
但是当我启动我的服务器时。看到这个:
提供的正则表达式使用多行锚点(^或$),这可能会带来安全风险。您的意思是使用\ A和\ z,还是忘记添加:multiline =&gt;真的选择?
答案 0 :(得分:15)
^
和$
都是行锚。如果用户要使用http://www.foo.com/bar.png\nfoo_bar_baz!
传入字符串,那么您的正则表达式会说输入有效,因为它会将.png
与新行匹配,这不是您想要的。
将上面的正则表达式更改为%r{\.(gif|jpg|png)\z}i
。 \z
是字符串锚点的结尾,这是您想要的而不是行结束锚点。
另一个非常相似的问题有一些很好的答案:Difference between \A \z and ^ $ in Ruby regular expressions。