web-dev-qa-db-fra.com

Vérification du référent

J'utilise ceci pour vérifier si quelqu'un vient de Reddit, mais cela ne fonctionne pas.

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

Les suggestions sur l'expression régulière sont également les bienvenues.

31
Ben Shelock

Essaye ça:

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

L'expression régulière:

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

Fermez votre if paren ...

12
Skilldrick

J'ai utilisé une alternative à RegEx en recherchant le domaine dans le référent

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

EDIT: Comme le souligne thekingoftruth, cela ne fonctionne pas si reddit.com est inclus dans un paramètre d'URL, je l'ai donc un peu étendu. J'ai également ajouté àLowerCase () comme je l'ai repéré dans le RegExp ci-dessus.

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');
    }
}
6
TimSmith-Aardwolf

Essaye ça:

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

Ou:

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