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和^ $之间的区别.