JavaScript経由でクエリ文字列値が存在するかどうかを確認するにはどうすればよいですか?


91

q=JavaScriptまたはjQueryを使用してクエリ文字列にが含まれているかどうかを確認するにはどうすればよいですか?


これはあまりにも助けになるかもしれません: stackoverflow.com/a/12151322は -についての情報が含まれていURLSearchParams:、例えば var url = new URLSearchParams(location.search); url.has("my_great_query");リターンをtrueそのクエリ文字列は、あなたのURLにある場合。その後、でその値を取得できますurl.get("my_great_query");
user1063287

回答:


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

7
複数のリターンパスは個人的な選択です。それらを使用すると、ネストされたifステートメントを回避し、コードの特定のポイントで何が起こっているかを正確に示すことができるため、よりクリーンなコードにつながると思います。stictの場合については、左側と右側の両方が常に数値になるため、厳密な等価演算子に切り替えるとどのような違いがありますか?
LorenVS

4
よりクリーンなコード?...まったく役に立たない予備のIFステートメントに配置するのではなく、indexOfテストを返すのはなぜですか。
ジェームズ

4
JPに同意します。あなたは正しい解決策を書いたかもしれませんが、あなたのコードは本当にずさんです。中括弧はどこにありますか?中かっこなしのスタイルで記述されたコードが特定の条件下で失敗し、メンテナンス中に混乱を招くことが証明されている「良い部分」を読む必要があります。

2
url.indexOf(field + '=')!= -1で十分だと思います。それが最初であるかどうかは関係ありません
yyy

2
@yyyいいえ、そうではありませんでした。のようなクエリ文字列がある場合?kodiaq=1url.indexOf('q=')接頭辞を付けずに呼び出す&?qパラメータが存在すると信じるようになります。
michalstanko 2018年

113

正規表現を使用することもできます。

/[?&]q=/.test(location.search)

1
実際には次のようになります:if(!new RegExp( "[?&] hfPageToken =")。test(s.data))// hfPageTokenデータがリクエストにまだ存在しない場合{s.data = s.data ?[s.data、tokenParam] .join( "&"):tokenParam; }
Dragos Durlut

9
明確にするために、これはうまく機能しますif(/[?&]q=/.test(location.search)) { alert("match"); }(@DragosDurlutのコメントが原因で少し混乱しました。)
Leia

1
ヨーダは正規表現に関して「彼らはより短いコードである..読みやすいのではない」と言うでしょう。
RayLoveless

23

使用URL

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

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

}

編集:互換性について悲しい場合は、https://github.com/medialize/URI.js/を強くお勧めします


4
いいですが、IEのサポートはありません。
UpTheCreek

1
@UpTheCreekは悲しいことにそう見えます。互換性のあるバージョンに切り替える必要がありました。夢を見ることができます。
Damien Roche

9

あなたの質問に文字通り答える単純なJavaScriptコードサンプル:

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

qパラメータが存在するかどうか、およびパラメータに値があるかどうかを検索するプレーンJavaScriptコードサンプル:

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;

7
最初の例は、trueを返します fooq=bar
mickadoo

4

もう1つのバリアントですが、Gumbosソリューションとほぼ同じです。

var isDebug = function(){
    return window.location.href.search("[?&]debug=") != -1;
};

3

この関数は、JSのURLからパラメーターを取得するのに役立ちます

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

3

これを試して

//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/


2

最近のブラウザでは、これにより、これがはるかに簡単になりました URLSearchParamsインターフェースの。これは、URLのクエリ文字列を操作するユーティリティメソッドのホストを定義します。

URLがhttps://example.com/?product=shirt&color=blue&newuser&size=mであるとすると、次を使用してクエリ文字列を取得できますwindow.location.search

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

次に、次を使用してクエリ文字列のパラメータを解析できますURLSearchParams

const urlParams = new URLSearchParams(queryString);

次に、結果に対してそのメソッドを呼び出すことができます。

たとえばURLSearchParams.get()、指定された検索パラメーターに関連付けられた最初の値を返します。

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

を使用URLSearchParams.has()して、特定のパラメータが存在するかどうかを確認できます。

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

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

詳細については、こちらをクリックしてください


0

私はこのライブラリを以前に使用したことがありますが、これはあなたが何を求めているかについてかなり良い仕事をします。具体的には:-

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

    if (qs2.contains("name1")){ alert(qs2.get("name1"));}

0

これは役立つはずです:

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 {};
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.