提供的正则表达式使用多行锚点(^或$)
我尝试编写一个图像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和^ $的区别 。