Como verificar se o URL contém uma determinada string?

Como eu poderia fazer algo assim:

 $(document).ready(function () { if(window.location.contains("franky")) // This doesn't work, any suggestions? { alert("your url contains the name franky"); } });  

Você precisa adicionar a propriedade href e verificar indexOf vez de contains

  
 if (window.location.href.indexOf("franky") != -1) 

faria isso. Alternativamente, você poderia usar um regexp:

 if (/franky/.test(window.location.href)) 

igual a:

   

Você usaria indexOf assim:

 if(window.location.href.indexOf("franky") != -1){....} 

Observe também a adição de href para a string, caso contrário você faria:

 if(window.location.toString().indexOf("franky") != -1){....} 

A maneira regex:

 var matches = !!location.href.match(/franky/); //a boolean value now 

Ou, em uma declaração simples, você poderia usar:

 if (location.href.match(/franky/)) { 

Eu uso isso para testar se o site está sendo executado localmente ou em um servidor:

 location.href.match(/(192.168|localhost).*:1337/) 

Isto verifica se o href contém 192.168 ou localhost AND é seguido por :1337 .

Como você pode ver, o uso do regex tem suas vantagens sobre as outras soluções quando a condição fica um pouco mais complicada.

window.location não é um String, mas tem um toString() . Então você pode fazer assim:

 (''+window.location).includes("franky") 

ou

 window.location.toString().includes("franky") 

Dos antigos documentos do Mozilla :

Objetos de localização têm um método toString retornando o URL atual. Você também pode atribuir uma string a window.location. Isso significa que você pode trabalhar com window.location como se fosse uma string na maioria dos casos. Às vezes, por exemplo, quando você precisa chamar um método String, você precisa chamar explicitamente toString.

document.URL deve obter o URL e

 if(document.URL.indexOf("searchtext") != -1) { //found } else { //nope } 

Tente isso, é mais curto e funciona exatamente como window.location.href :

 if (document.URL.indexOf("franky") > -1) { ... } 

também se você quiser verificar o URL anterior:

 if (document.referrer.indexOf("franky") > -1) { ... } 

Tente isto:

  

Tente indexOf

 if (foo.indexOf("franky") >= 0) { ... } 

Você também pode tentar pesquisar (para expressões regulares)

 if (foo.search("franky") >= 0) { ... } 

Eu gosto de criar um boolean e depois usar isso em um if lógico.

 //kick unvalidated users to the login page var onLoginPage = (window.location.href.indexOf("login") > -1); if (!onLoginPage) { console.log('redirected to login page'); window.location = "/login"; } else { console.log('already on the login page'); } 

Mais fácil fica

  

Use Window.location.href para pegar a url em javascript. é uma propriedade que informa a localização atual do URL do navegador. Definir a propriedade para algo diferente redirectá a página.

 if (window.location.href.indexOf('franky') > -1) { alert("your url contains the name franky"); } 

Coloque no seu arquivo js

  var url = window.location.href; console.log(url); console.log(~url.indexOf("#product-consulation")); if (~url.indexOf("#product-consulation")) { console.log('YES'); // $('html, body').animate({ // scrollTop: $('#header').offset().top - 80 // }, 1000); } else { console.log('NOPE'); } 

Expressões regulares serão mais ideais para muitas pessoas devido a limites de palavras \b ou dispositivos semelhantes. Os limites de palavras ocorrem quando qualquer um dos 0-9 , az , AZ , _ está nesse lado da próxima correspondência, ou quando um caractere alfanumérico se conecta à linha ou ao final ou início da cadeia.

 if (location.href.match(/(?:\b|_)franky(?:\b|_))) 

Se você usar if(window.location.href.indexOf("sam") , você obterá correspondências para flotsam e same , entre outras palavras. tom corresponde a tomato e amanha, sem regex.

Tornar-se sensível a maiúsculas e minúsculas é tão simples quanto remover o i .

Além disso, adicionar outros filtros é tão fácil quanto

 if (location.href.match(/(?:\b|_)(?:franky|bob|billy|john|steve)(?:\b|_)/i)) 

Vamos falar sobre (?:\b|_) . RegEx geralmente define _ como um word character portanto, não causa um limite de palavra. Nós usamos isso (?:\b|_) para lidar com isso. Para ver se ele encontra \b ou _ em ambos os lados da string.

Outras línguas podem precisar usar algo como

 if (location.href.match(/([^\wxxx]|^)(?:franky|bob|billy|john|steve)([^\wxxx]|$)/i)) //where xxx is a character representation (range or literal) of your language's alphanumeric characters. 

Tudo isso é mais fácil do que dizer

 var x = location.href // just used to shorten the code x.indexOf("-sam-") || x.indexOf("-sam.") || x.indexOf(" sam,") || x.indexOf("/sam")... // and other comparisons to see if the url ends with it // more for other filters like frank and billy 

Os sabores de Expressões Regulares de outros idiomas suportam \p{L} mas o javascript não, o que facilitaria muito a tarefa de detectar caracteres estrangeiros. Algo como [^\p{L}](filters|in|any|alphabet)[^\p{L}]

Suponha que você tenha esse script

 

E o formulário de URL é www.localhost.com/web_form_response.html?text_input=stack&over=flow

O texto escrito para

será stack