Подтвердить что ты не робот

Проверка реферера

Я использую это, чтобы проверить, не пришел ли кто-нибудь из Reddit, однако он не работает.

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

Предложения по регулярному выражению также приветствуются.

4b9b3361

Ответ 1

Попробуйте следующее:

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

Ответ 2

Закройте дескриптор if...

Ответ 3

Я использовал альтернативу RegEx, ища домен в реферере

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

РЕДАКТИРОВАТЬ: Как указывает thekeyoftruth, это не работает, если reddit.com включен в параметр URL, поэтому я немного расширил его. Я также добавил toLowerCase(), как я заметил, что в 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');
    }
}

Ответ 4

Попробуйте следующее:

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

Или:

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

Ответ 5

Использовать var ref = document.referer; //ONE R вместо TWO​​p >