JavaScript를 통해 쿼리 문자열 값이 있는지 확인하는 방법은 무엇입니까?


97

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

답변:


109
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의 경우 왼쪽과 오른쪽 모두 항상 숫자가됩니다. 따라서 Strict Equality 연산자로 전환하면 어떤 차이가 생길까요?
LorenVS

4
더 깨끗한 코드? ... 완전히 쓸모없는 예비 IF 문에 배치하는 대신 indexOf 테스트를 반환하지 않는 이유는 무엇입니까?
James

4
JP에 동의합니다. 올바른 솔루션을 작성했을 수 있지만 코드가 정말 조잡합니다. 중괄호는 어디에 있습니까? 중괄호없이 스타일을 작성한 코드가 특정 조건에서 실패하고 유지 관리 중에 혼란을 일으키는 것으로 입증 된 "The Good Parts"를 읽어야합니다.

2
url.indexOf (field + '=')! = -1이면 충분하다고 생각합니다. 그것이 처음이든
아니든

2
@yyy 아니에요. 와 같은 쿼리 문자열이있는 경우 또는 접두사없이 ?kodiaq=1호출 하면 매개 변수가 존재 한다고 믿게 됩니다. url.indexOf('q=')&?q
michalstanko

115

정규식을 사용할 수도 있습니다.

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

1
실제로는 다음과 같습니다. if (! new RegExp ( "[? &] hfPageToken ="). test (s.data)) // 요청에 hfPageToken 데이터가 아직없는 경우 {s.data = s.data ? [s.data, tokenParam] .join ( "&") : tokenParam; }
Dragos Durlut 2012

9
그냥 명확히하기 위해,이 위대한 작품 if(/[?&]q=/.test(location.search)) { alert("match"); }(내가 조금 인해 @DragosDurlut 코멘트에 혼란스러워했다 :).
레아

1
Yoda는 정규 표현식에 대해 "짧은 코드는 .. 읽기가 더 쉽습니다."라고 말합니다.
RayLoveless


9

귀하의 질문에 문자 그대로 대답하는 일반 자바 스크립트 코드 샘플 :

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

q 매개 변수가 존재하고 값이 있는지 확인하는 일반 자바 스크립트 코드 샘플 :

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

변형이 하나 더 있지만 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];
}


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.