2010-01-08 46 views
27

Tôi đang sử dụng tính năng này để kiểm tra xem có ai đó đến từ Reddit hay không, tuy nhiên nó không hoạt động.Kiểm tra giới thiệu

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

Đề xuất về cụm từ thông dụng cũng được chào đón nhiều nhất.

Trả lời

78

Hãy thử điều này:

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

Các 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 để có giải thích chi tiết về biểu thức chính quy. Rất hữu ích. –

12

Đóng if Dấu ngoặc đơn của bạn ...

+0

Doh, nó luôn là thứ khiến tôi trông thật ngu ngốc. –

+3

:) Mọi người mắc lỗi như vậy. Sử dụng thứ gì đó sẽ cung cấp cho bạn các lỗi (như Firebug), bởi vì nhìn chằm chằm vào một trang JavaScript không hoạt động âm thầm là một PITA. – Skilldrick

1

Hãy thử điều này:

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

Hoặc:

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

Sử dụng var ref = document.referer; // ONE R thay vì HAI

+0

Điều này khớp chính xác với những gì tôi đang tìm kiếm; người giới thiệu trong tiêu đề. – cjbarth

6

Tôi đã sử dụng để thay thế cho regex bằng cách tìm kiếm các tên miền trong giới thiệu

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

EDIT: Như thekingoftruth điểm ra rằng không hoạt động nếu reddit. com được bao gồm trong một tham số URL vì vậy tôi đã mở rộng nó một chút. Tôi cũng đã thêm toLowerCase() khi tôi phát hiện ra rằng trong RegExp ở trên.

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

Vấn đề duy nhất là nếu liên kết giới thiệu chứa url phụ bên trong nó dưới dạng tham số truy vấn, giả sử. – thekingoftruth

+1

Điểm công bằng thekingoftruth. Tôi cho rằng tôi có thể kiểm tra một cái? và nhìn trước đó. Tôi cũng đã thêm một toLowerCase(). Tôi chỉ là một chút buồn (nếu không ngạc nhiên) rằng giải pháp một dòng không còn nữa :-) –

+0

Tôi nghe bạn. Javascript thực sự làm cho nó khó có một lớp lót nhỏ gọn. :( – thekingoftruth