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

361

Como eu poderia fazer algo assim:

<script type="text/javascript">
$(document).ready(function () {
    if(window.location.contains("franky")) // This doesn't work, any suggestions?
    {
         alert("your url contains the name franky");
    }
});
</script>
RayLoveless
fonte
"window.location.contains is not a function"
gene b.

Respostas:

657

Você precisa adicionar a propriedade href e marcar em indexOfvez decontains

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
    if (window.location.href.indexOf("franky") > -1) {
      alert("your url contains the name franky");
    }
  });
</script>

JW
fonte
3
Eu tenho um URL longo como este, preview.tbwabox.co.nz/_v005/index.html#buying-a-car e quero verificar se a string "comprando um carro, mas o script" não está funcionando ?
Vennsoh
6
@Vennsoh Você não é capaz de encontrar "compra-a-car", porque você precisa olhar em window.location.hashnão window.location.href. Simplesmente troque esses valores na função do OP.
Adrian Gonzales
11
@JW Por que`> -1` não podemos usar`> 0`?
21717
5
@ Elshan Porque, estritamente falando, .href.indexOf("franky") pode retornar um valor 0 se .hrefcomeçar com "franky". Obviamente, nesse caso, ele nunca .hrefinicia como sempre começa com o protocolo, geralmente "http:" ou "file:". Apesar disso, você SEMPRE deve usar> -1,> = 0 ou, minha preferência,! == - 1 ao comparar com o resultado de indexOf().
robinCTS
Eu tenho uma matriz de valor e quero ver se o URL tem algum valor e me dê o índice da matriz que corresponde à condição. Como faço isso? Obrigado.
Si8
101
if (window.location.href.indexOf("franky") != -1)

faria isso. Como alternativa, você pode usar um regexp:

if (/franky/.test(window.location.href))
NickFitz
fonte
4
Um prós / contras entre as duas opções seria uma boa adição a esta resposta.
Chris
Mas se eu usasse uma expressão regex ninguém seria capaz de lê-lo;)
RayLoveless
26

Você usaria indexOfassim:

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

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

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

igual a:

    <script type="text/javascript">
        $(document).ready(function () {
            if(window.location.href.indexOf("cart") > -1) 
            {
                 alert("your url contains the name franky");
            }
        });
    </script>
Adrian Gonzales
fonte
Qual é a diferença entre chamar window.location.indexOf e window.location.href.indexOf?
starsplusplus
@starsplusplus Não há nenhuma diferença. window.location.hrefé uma abreviatura de window.location developer.mozilla.org/en-US/docs/Web/API/Window.location
Adrian Gonzales
O acima de um fino trabalha para mim, mas para duas variáveis como verificar a sua contém os ambos os valores
Vinoth Narayan
11
@VinothNarayan Você pode simplesmente adicionar outra condição à ifdeclaração. Para ter certeza de que possui os dois, você pode usar o operador AND, que está &&em Javascript: if( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 ) para verificar se ele possui um ou outro valor, use o operador OR, que possui dois caracteres de pipe|| if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
Adrian Gonzales
19

window.locationnão é uma String, mas tem um toString()método. Então você pode fazer assim:

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

ou

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

Dos documentos antigos do Mozilla :

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

Alin Purcaru
fonte
2
No Firefox 48, String.prototype.contains () foi removido. Use apenas String.prototype.includes (). Veja aqui
CaseyC
@CaseyC Changed. Obrigado!
Alin Purcaru
9

A maneira regex:

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

Ou, em uma declaração simples, você pode 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/)

Isso verifica se o href contém 192.168ou localhostAND é seguido por:1337 .

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

Stephan Bijzitter
fonte
Agradável. Eu usei if (window.parent.location.href.match (/ \? /)) {Window.parent.location = window.parent.location.pathname; } e funciona muito bem ...
Tarik
Como alternativa, me parece um pouco mais conciso usar if(/franky/.test(location.href)) { /* regex matched */ }se não estiver fazendo nada com as partidas.
Cchamberlain 11/06/16
Sim, testé definitivamente mais limpo do que matchneste caso.
Stephan Bijzitter 14/05
6

document.URLdeverá fazê-lo o URLe

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

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

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

Além disso, se você quiser verificar o URL anterior:

if (document.referrer.indexOf("franky") > -1) { ... }
sixstarpro
fonte
@sixstarpro Eu não fiz o voto negativo, mas, oh, eu não sei, talvez obviamente porque você deu a mesma resposta que essa postada 18 meses antes! Além disso, as informações extras sobre document.referrersão completamente irrelevantes para a pergunta.
robinCTS
4

Mais fácil fica

<script type="text/javascript">
$(document).ready(function () {
    var url = window.location.href;
    if(url.includes('franky'))    //includes() method determines whether a string contains specified string.
    {
         alert("url contains franky");
    }
});
</script>
Vishnu Dev
fonte
3

Tente o seguinte:

<script type="text/javascript">             
    $(document).ready
    (
        function () 
        { 
            var regExp = /franky/g;
            var testString = "something.com/frankyssssddsdfjsdflk?franky";//Inyour case it would be window.location;
            if(regExp.test(testString)) // This doesn't work, any suggestions.                 
            {                      
                alert("your url contains the name franky");                 
            }             
        }
    );         
</script> 
Chandu
fonte
3

Tente indexOf

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

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

if (foo.search("franky") >= 0)
{
  ...
}
Yoni Baciu
fonte
2

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

if (window.location.href.indexOf('franky') > -1) {
     alert("your url contains the name franky");
}
Sudharsan S
fonte
Como verificar se um URL é a página padrão e a verificação de iam da string não está visível. como por exemplo sample.com/homepage.aspx é minha página e iam procurando pela string 'homepage'. if ((loc.toString (). toUpperCase (). indexOf ('homepage')> -1)) {} funciona bem, mas quando o Iam no sample.com (que ainda aponta para homepage.aspx) acima do código não funcionará. Como verificar esse cenário também? Por favor, ajude!
Sweta
2

Eu gosto de criar um booleane depois usá-lo de forma lógica if.

//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');
}
Ronnie Royston
fonte
1

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');
                }
alemac852
fonte
Eu não sabia ~, então procurei: " ~é um truque para transformar indexOf()o valor de retorno encontrado em verdade (ao mesmo tempo em que não é encontrado como falso). As pessoas o usam como efeito colateral de truncar números ..." - stackoverflow.com/a/12299678/3917091
Joe regular
1

Expressões regulares serão mais ideais para muitas pessoas devido a limites de palavras \bou dispositivos semelhantes. Limites de palavra ocorrer quando qualquer um 0-9, a-z, A-Z, _estão em que o lado do próximo jogo, ou quando um alfanuméricos Ligações personagem a linha ou fim string ou começando.

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

Se você usar if(window.location.href.indexOf("sam"), receberá correspondências para flotsame same, entre outras palavras.tomcombinaria tomate e amanhã, sem regex.

Tornar a distinção entre 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 conversar (?:\b|_). RegEx normalmente define _como um, word characterpara que não cause um limite de palavras. Usamos isso (?:\b|_)para lidar com isso. Para ver se encontra \bou_ em ambos os lados da cadeia.

Outros idiomas 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 são compatíveis, \p{L}mas o javascript não, o que tornaria a tarefa de detectar caracteres estrangeiros muito mais fácil. Algo como[^\p{L}](filters|in|any|alphabet)[^\p{L}]

Joe Regular
fonte
O único lado para baixo para expressões regulares é que eles são "write único" (ou seja, impossível de ler.);)
RayLoveless
@ RayLoveless Sim, em idiomas sem (?#comments)e espaçamento livre # commentscomo javascript. No entanto, este não é difícil de ler. // Quando uso um regex complexo em javascript, mantenho uma cópia comentada que posso editar lol.
Regular Joe
0

Suponha que você tenha esse script

<div>
  <p id="response"><p>
  <script>
    var query = document.location.href.substring(document.location.href.indexOf("?") + 1);
    var text_input = query.split("&")[0].split("=")[1];
    document.getElementById('response').innerHTML=text_input;
  </script> </div>

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

O texto escrito para <p id="response">serástack

Dhiraj Himani
fonte
0

Será uma boa prática se você converter sua string para maiúsculas ou minúsculas, pois o método indexof () diferencia maiúsculas de minúsculas. Isso ocorrerá se a sua pesquisa não for sensível a maiúsculas e minúsculas. Portanto, para uma pesquisa que não diferencia maiúsculas de minúsculas, será:

var string= location.href;
var convertedString= string.toLowerCase();
 if(convertedString.indexOf(franky) != -1){
  alert("url has franky");
}
else{
 alert("url has no franky");
 }
GeniusGeek
fonte