2010-01-08 15 views
27

Birisinin Reddit'ten gelip gelmediğini kontrol etmek için kullanıyorum, ancak çalışmıyor.Yönlendirenin kontrol edilmesi

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

Düzenli ifade ile ilgili öneriler de çok açıktır.

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

Veya:

cevap

78

bu deneyin:

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

regexp'in:

/^   # 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. Çok yararlı. –

12

sizin if paren kapatın ...

+0

Doh, her zaman beni gerçekten aptal yapan şeyler. –

+3

:) Herkes böyle hatalar yapar. Hata veren bir JavaScript sayfasına bakmanın bir PITA olduğu için size hata verecek (Firebug gibi) bir şey kullanın. Normal ifadenin ayrıntılı açıklaması için – Skilldrick

1

bu deneyin

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

Var ref = document.referer; Ama bir alternatif kullanıyorum yerine İKİ

+0

Bu, tam olarak aradığımla eşleşiyor; başlıktaki referer. – cjbarth

6

ait // BİR R yönlendirenlerin de etki alanı için

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

EDIT bakarak regex için: dışarı thekingoftruth noktaları reddit eğer çalışmaz gibi. com bir URL parametresinde bulunur, bu yüzden biraz uzattım. Yukarıdaki RegExp'te belirttiğim gibi, LowerCase() öğesine ekledim.

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

Tek sorun, yöneltenin sorgu parametresi olarak bir alt url içeriyorsa, diyelim. – thekingoftruth

+1

Fuar noktası thekingoftruth. Sanırım bir çek için yapabilirim? ve ondan önce bak. Ayrıca bir toLowerCase() ekledim. Sadece biraz üzgün (eğer şaşırmadım) tek hat çözümünün artık olmadığını biliyorum :-) –

+0

Seni duyuyorum. Javascript, kompakt tek gömleklere sahip olmayı gerçekten zorlaştırıyor. :( – thekingoftruth