2010-01-08 15 views
27

की जांच कर रहा हूं मैं यह जांचने के लिए उपयोग कर रहा हूं कि कोई Reddit से आया है, हालांकि यह काम नहीं करता है।रेफरर

var ref = document.referrer; 
if(ref.match("/http://(www.)?reddit.com(/)?(.*)?/gi"){ 
    alert('You came from Reddit'); 
} else { 
    alert('No you didn\'t'); 
} 

नियमित अभिव्यक्ति पर सुझावों का भी स्वागत है। या

ref.match(new RegExp("^http://(www\\.)?reddit\\.com/", "i")) 

:

उत्तर

78

इस प्रयास करें:

if (ref.match(/^https?:\/\/([^\/]+\.)?reddit\.com(\/|$)/i)) { 
    alert("Came from reddit"); 
} 

regexp:

/^   # ensure start of string 
http  # match 'http' 
s?   # 's' if it exists is okay 
:\/\/  # match '://' 
([^\/]+\.)? # match any non '/' chars followed by a '.' (if they exist) 
reddit\.com # match 'reddit.com' 
(\/|$)  # match '/' or the end of the string 
/i   # match case-insenitive 
+15

+1। बहुत उपयोगी। –

12

अपने if कोष्ठक बंद ...

+0

दोह, यह हमेशा सामान है जो मुझे वास्तव में बेवकूफ दिखता है। –

+3

:) हर कोई इस तरह की गलती करता है। कुछ ऐसा उपयोग करें जो आपको त्रुटियों (जैसे फ़ायरबग) देगा, क्योंकि एक चुपचाप असफल जावास्क्रिप्ट पेज पर घूरना एक पिटा है। नियमित अभिव्यक्ति की गहराई से स्पष्टीकरण के लिए – Skilldrick

1

इस प्रयास करें

ref.match(/^http:\/\/(www\.)?reddit\.com\//i) 
-3

var ref = document.referer का उपयोग करें; // एक से दो

+0

यह वही मेल खाता है जो मैं खोज रहा था; हेडर में रेफरर। – cjbarth

6

के बजाय आर मैं एक विकल्प का उपयोग कर रहे रेफरर में डोमेन की तलाश में

if (document.referrer.indexOf('reddit.com') >= 0) { alert('They came from Reddit.com'); } 

संपादित करें द्वारा regex के लिए: कि बाहर thekingoftruth अंक reddit अगर काम नहीं करता है के रूप में। कॉम को एक यूआरएल पैरामीटर में शामिल किया गया है, इसलिए मैंने इसे थोड़ा बढ़ा दिया है। मैंने LowerCase() में भी जोड़ा है जैसा कि मैंने देखा है कि ऊपर RegExp में।

if (document.referrer.indexOf('?') > 0){ 
    if (document.referrer.substring(0,document.referrer.indexOf('?')).toLowerCase().indexOf('reddit.com') >= 0){ 
    alert('They came from Reddit'); 
    } 
} else { 
    if (document.referrer.toLowerCase().indexOf('reddit.com') > 0){ 
      alert('They came from Reddit'); 
    } 
} 
+2

एकमात्र मुद्दा यह है कि रेफरर में एक क्वेरी पैरामीटर के रूप में इसके भीतर एक उप-यूआरएल होता है, कहें। – thekingoftruth

+1

फेयर पॉइंट thekingoftruth। मुझे लगता है कि मैं एक चेक कर सकता था? और इससे पहले देखो। मैंने एक toLowerCase() भी जोड़ा है। मैं थोड़ा सा दुखी हूं (अगर आश्चर्य नहीं हुआ) कि एक लाइन समाधान अब और नहीं है :-) –

+0

मैं आपको सुनता हूं। जावास्क्रिप्ट वास्तव में कॉम्पैक्ट एक-लाइनर रखना मुश्किल बनाता है। :( – thekingoftruth

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