Comment vérifier si une valeur de chaîne de requête est présente via JavaScript?

91

Comment puis-je vérifier si la chaîne de requête contient un q=en utilisant JavaScript ou jQuery?

mrblah
la source
Cela peut également être utile: stackoverflow.com/a/12151322 - contient des informations sur URLSearchParams , par exemple: var url = new URLSearchParams(location.search); url.has("my_great_query");renvoie truesi cette chaîne de requête est dans votre URL. Vous pouvez alors obtenir sa valeur avec url.get("my_great_query");.
user1063287

Réponses:

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
la source
7
Les chemins de retour multiples sont un choix personnel, je les utilise car je pense qu'ils mènent à un code plus propre, car ils m'aident à éviter les instructions if imbriquées et à montrer exactement ce qui se passe à un certain point du code. En ce qui concerne les cas stricts, les côtés gauche et droit seront toujours des nombres, alors quelle différence le passage à des opérateurs d'égalité stricte ferait-il?
LorenVS
4
Code plus propre? ... Pourquoi ne pas simplement renvoyer le test indexOf, au lieu de le placer dans une instruction IF préliminaire totalement inutile.
James
4
Je suis d'accord avec JP. Vous avez peut-être écrit la bonne solution, mais votre code est vraiment bâclé. Où êtes-vous des accolades? Vous devriez lire "The Good Parts" où le code écrit un style sans accolades s'est avéré échouer dans certaines conditions et produit de la confusion pendant la maintenance.
2
url.indexOf (field + '=')! = -1 suffisait je pense. Peu importe que ce soit au début ou non
aaaa
2
@yyy Non, ce n'était pas le cas. Si vous aviez une chaîne de requête comme ?kodiaq=1, alors appeler url.indexOf('q=')sans la préfixer avec &ou ?vous amènerait à croire que le qparamètre est présent.
michalstanko
113

Vous pouvez également utiliser une expression régulière:

/[?&]q=/.test(location.search)
Gombo
la source
1
en fait, cela ressemblerait plus à: if (! new RegExp ("[? &] hfPageToken ="). test (s.data)) // si les données hfPageToken ne sont pas déjà présentes dans la requête {s.data = s.data ? [s.data, tokenParam] .join ("&"): tokenParam; }
Dragos Durlut
9
Juste pour clarifier, cela fonctionne très bien if(/[?&]q=/.test(location.search)) { alert("match"); }(j'étais un peu confus à cause du commentaire de @DragosDurlut. :)
Leia
1
Yoda dirait à propos des expressions régulières: "Du code plus court, ils sont .. plus faciles à lire, ils ne le sont pas".
RayLoveless
23

Utilisation URL:

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

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

}

EDIT: si vous êtes triste de la compatibilité, je suggère fortement https://github.com/medialize/URI.js/ .

Damien Roche
la source
4
Bien, mais pas de support IE.
UpTheCreek
1
@UpTheCreek apparaît tristement comme ça. J'ai dû le changer pour une version compatible. On peut rêver.
Damien Roche
9

L'exemple de code javascript simple qui répond littéralement à votre question:

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

L'exemple de code javascript simple qui tente de trouver si le paramètre q existe et s'il a une valeur:

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
la source
7
Le premier exemple retournera vrai pourfooq=bar
mickadoo
4

une autre variante, mais presque la même que la solution Gumbos:

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

cette fonction vous aide à obtenir le paramètre de l'URL dans JS

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

Dans les navigateurs modernes, cela est devenu beaucoup plus facile, grâce à l' URLSearchParamsinterface. Cela définit une multitude de méthodes utilitaires pour travailler avec la chaîne de requête d'une URL.

En supposant que notre URL est https://example.com/?product=shirt&color=blue&newuser&size=m, vous pouvez récupérer la chaîne de requête en utilisant window.location.search:

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

Vous pouvez ensuite analyser les paramètres de la chaîne de requête en utilisant URLSearchParams:

const urlParams = new URLSearchParams(queryString);

Ensuite, vous pouvez appeler l'une de ses méthodes sur le résultat.

Par exemple, URLSearchParams.get()retournera la première valeur associée au paramètre de recherche donné:

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

Vous pouvez utiliser URLSearchParams.has()pour vérifier si un certain paramètre existe:

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

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

Pour en savoir plus, cliquez ici .

Plabon Dutta
la source
0

J'ai déjà utilisé cette bibliothèque qui fait un très bon travail de ce que vous recherchez. Plus précisément:-

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

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

Cela devrait aider:

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 {};
    }
}
Antidémarreur
la source