2012-11-04 24 views
11

मैं निम्नलिखित मार्ग है:रेल कस्टम मार्ग - regexp लंगर पात्रों मार्ग जरूरतों के मामले में अनुमति नहीं है

get 'users/:user_id/:name', to: 'profiles#show', 
    :constraints => { :name => /[a-zA-Z0-9_]+$/ }, as: 'user_profile' 

कौन-सा त्रुटि पैदा करता है:

Regexp anchor characters are not allowed in routing requirements: /[a-zA-Z0-9_]+$/ 

तो मैं मिलता है कि^चरित्र अनुमति नहीं है, लेकिन यह सुनिश्चित नहीं है कि कौन सा चरित्र इस विशेष रूटिंग त्रुटि का उत्पादन कर रहा है।

उत्तर

10

regex में हम दो एंकर है:

  1. लाइन की शुरुआत/स्ट्रिंग लाइन के ^
  2. अंत/स्ट्रिंग $

कोशिश पैटर्न से $ दूर करने के लिए और आप जाने के लिए अच्छा होना चाहिए ...

+4

मुझे पता है कि उनमें से '\ A' और' \ Z' भी हैं। – rausch

+1

@rausch - आम तौर पर, नियमित अभिव्यक्तियों में आप इस उद्देश्य के लिए देखभाल और डॉलर का उपयोग करते रहेंगे। कुछ वातावरण (जावास्क्रिप्ट, पॉज़िक्स, एक्सएमएल) '\ A' और' \ Z' का समर्थन नहीं करते हैं। –

+0

@ Ωmega रूबी में आपको ऐसा नहीं करना चाहिए; हमेशा '^' और '$' तक पहुंचने से सुरक्षा भेद्यता हो सकती है: http://homakov.blogspot.ru/2012/05/saferweb-injects-in-various-ruby.html http://guides.rubyonrails.org /security.html#regular-expressions –

12

रेगेक्स एंकर ^ और $ हैं, लेकिन वे यहां कुछ भी प्राप्त नहीं करते हैं। "(Y)ou don’t need to use anchors because all routes are anchored at the start."

तो बाधा:

:constraints => { :name => /[a-zA-Z0-9_]+/ } 

तुम क्या चाहते हो जाएगा - यह सुनिश्चित नाम 1 या उन पात्रों में से अधिक से बना है, और कुछ नहीं। बीटीडब्ल्यू आप रेगेक्स को सरल बना सकते हैं:

:constraints => { :name => /\w+/ }