2014-07-23 4 views
9

का उपयोग कर रही है, मैं एक छवि सत्यापन प्रारूप लिखने की कोशिश कर रहा हूं जो सुनिश्चित करता है कि यूआरएल या तो .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 => true विकल्प जोड़ने के लिए भूल गए?

+0

सवाल क्या है? यह कहने पर विचार करें। –

+0

बस '$' को '\ z' से प्रतिस्थापित करें, ऐसा लगता है कि यह आपके मामले में वही है। –

उत्तर

13

^ और $ दोनों लाइन एंकर हैं। यदि कोई उपयोगकर्ता 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

+2

याहू !! यह काम कर रहा है । बहुत बहुत धन्यवाद। :) – Mezbah

संबंधित मुद्दे