Como verificar se um valor de string de consulta está presente via JavaScript?

91

Como posso verificar se a string de consulta contém um q= nele usando JavaScript ou jQuery?

mrblah
fonte
Isso também pode ser útil : stackoverflow.com/a/12151322 - contém informações sobre URLSearchParams , por exemplo: var url = new URLSearchParams(location.search); url.has("my_great_query");retorna truese a string de consulta estiver em seu url. Você pode obter seu valor com url.get("my_great_query");.
user1063287

Respostas:

104
var field = 'q';
var url = window.location.href;
if(url.indexOf('?' + field + '=') != -1)
    return true;
else if(url.indexOf('&' + field + '=') != -1)
    return true;
return false
LorenVS
fonte
7
Múltiplos caminhos de retorno são uma escolha pessoal, eu os uso porque acho que levam a um código mais limpo, já que me ajudam a evitar instruções if aninhadas e mostram exatamente o que está acontecendo em um determinado ponto do código. Quanto aos casos rígidos, tanto o lado esquerdo quanto o direito sempre serão números, então que diferença faria a mudança para operadores de igualdade estrita?
LorenVS de
4
Código de limpeza? ... Por que não apenas retornar o teste indexOf, em vez de colocá-lo em uma instrução IF preliminar totalmente inútil.
James
4
Eu concordo com o JP. Você pode ter escrito a solução correta, mas seu código é realmente desleixado. Onde estão seus colchetes? Você deve ler "The Good Parts", onde o código escrito em um estilo sem chaves provou que falha em certas condições e produz confusão durante a manutenção.
2
url.indexOf (field + '=')! = -1 foi o suficiente, eu acho. Não importa se é no início ou não
aa
2
@yyy Não, não foi. Se você tivesse uma string de consulta como ?kodiaq=1, chamar url.indexOf('q=')sem prefixá-la com &ou ?levaria você a acreditar que o qparâmetro está presente.
michalstanko
113

Você também pode usar uma expressão regular:

/[?&]q=/.test(location.search)
quiabo
fonte
1
na verdade, ficaria mais parecido com: if (! new RegExp ("[? &] hfPageToken ="). test (s.data)) // se os dados hfPageToken ainda não estiverem presentes na solicitação {s.data = s.data ? [s.data, tokenParam] .join ("&"): tokenParam; }
Dragos Durlut
9
Só para esclarecer, funciona muito bem if(/[?&]q=/.test(location.search)) { alert("match"); }(fiquei um pouco confuso devido ao comentário de @DragosDurlut. :)
Leia
1
Yoda diria a respeito das expressões regulares: "Código mais curto eles são .. mais fáceis de ler, não são".
RayLoveless
23

Usando URL:

url = new URL(window.location.href);

if (url.searchParams.get('test')) {

}

EDITAR: se você está triste com a compatibilidade, sugiro https://github.com/medialize/URI.js/ .

Damien Roche
fonte
4
Legal, mas sem suporte para o IE.
UpTheCreek
1
@UpTheCreek infelizmente parece que sim. Tive que trocá-lo por uma versão compatível. Podemos sonhar.
Damien Roche
9

O exemplo de código JavaScript simples que responde literalmente à sua pergunta:

return location.search.indexOf('q=')>=0;

O exemplo de código javascript simples que tenta descobrir se o parâmetro q existe e se tem um valor:

var queryString=location.search;
var params=queryString.substring(1).split('&');
for(var i=0; i<params.length; i++){
    var pair=params[i].split('=');
    if(decodeURIComponent(pair[0])=='q' && pair[1])
        return true;
}
return false;
Peter Dolberg
fonte
7
O primeiro exemplo retornará verdadeiro parafooq=bar
mickadoo
4

mais uma variante, mas quase igual à solução Gumbos:

var isDebug = function(){
    return window.location.href.search("[?&]debug=") != -1;
};
Humppakäräjät
fonte
3

esta função ajuda você a obter o parâmetro do URL em JS

function getQuery(q) {
    return (window.location.search.match(new RegExp('[?&]' + q + '=([^&]+)')) || [, null])[1];
}
Bafi
fonte
3

Tente isto

//field "search";
var pattern = /[?&]search=/;
var URL = location.search;

if(pattern.test(URL))
{
    alert("Found :)");
}else{
    alert("Not found!");
}

JSFiddle: https://jsfiddle.net/codemirror/zj4qyao2/

codemirror
fonte
2

Em navegadores modernos, isso se tornou muito mais fácil, graças ao URLSearchParams interface. Isso define uma série de métodos utilitários para trabalhar com a string de consulta de um URL.

Supondo que nosso URL seja https://example.com/?product=shirt&color=blue&newuser&size=m, você pode pegar a string de consulta usando window.location.search:

const queryString = window.location.search;
console.log(queryString);
// ?product=shirt&color=blue&newuser&size=m

Você pode então analisar os parâmetros da string de consulta usando URLSearchParams:

const urlParams = new URLSearchParams(queryString);

Então você pode chamar qualquer um de seus métodos no resultado.

Por exemplo, URLSearchParams.get()retornará o primeiro valor associado ao parâmetro de pesquisa fornecido:

const product = urlParams.get('product')
console.log(product);
// shirt

const color = urlParams.get('color')
console.log(color);
// blue

const newUser = urlParams.get('newuser')
console.log(newUser);
// empty string

Você pode usar URLSearchParams.has()para verificar se um determinado parâmetro existe:

console.log(urlParams.has('product'));
// true

console.log(urlParams.has('paymentmethod'));
// false

Para ler mais, clique aqui .

Plabon Dutta
fonte
0

Já usei essa biblioteca antes, que faz um bom trabalho com o que você procura. Especificamente:-

qs.contains(name)
    Returns true if the querystring has a parameter name, else false.

    if (qs2.contains("name1")){ alert(qs2.get("name1"));}
Gavin Gilmour
fonte
0

Isso deve ajudar:

function getQueryParams(){
    try{
        url = window.location.href;
        query_str = url.substr(url.indexOf('?')+1, url.length-1);
        r_params = query_str.split('&');
        params = {}
        for( i in r_params){
            param = r_params[i].split('=');
            params[ param[0] ] = param[1];
        }
        return params;
    }
    catch(e){
       return {};
    }
}
Botão de desligar
fonte