2010-01-08 1 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"); 
} 

정규 표현식 :

/^   # 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

Doh는 항상 나를 바보처럼 보이게합니다. –

+3

:) 모두들 실수를 저질렀습니다. 자동으로 실패한 JavaScript 페이지를 보았을 때 PITA이기 때문에 오류 (예 : 방화범 소리)를 줄 수있는 무언가를 사용하십시오. – Skilldrick

1

이 시도

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

var ref = document.referer; 내가 대안을 사용하고 대신 두

+0

정확히 찾고자하는 내용과 일치합니다. 헤더의 referer. – cjbarth

6

의 // ONE R은 참조 페이지에서 도메인에 대한

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

편집을보고 정규식합니다 : 그 밖으로 thekingoftruth 포인트 레딧 경우 작동하지 않기 때문에. com은 URL 매개 변수에 포함되어 있으므로 약간 확장했습니다. 위의 RegExp에서 그걸 발견 했으므로 LowerCase()도 추가했습니다.

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

유일한 문제는 리퍼러에 쿼리 매개 변수로 하위 URL이 포함되어있는 경우입니다. – thekingoftruth

+1

공정한 진술. 내가 수표를 줄 수 있다고 생각해? 그 전에 봐. toLowerCase()도 추가했습니다. 나는 한 가지 해결책이 더 이상 없다는 사실을 조금 놀랐습니다. (놀랍지는 않지만) –

+0

들었습니다. Javascript는 정말로 컴팩트 한 라이너를 갖는 것을 어렵게 만듭니다. :( – thekingoftruth