URL에 주어진 문자열이 포함되어 있는지 확인하는 방법은 무엇입니까?


361

어떻게 이런 식으로 할 수 있습니까?

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

"window.location.contains is not a function"
유전자 b.

답변:


656

indexOf대신 href 속성을 추가하고 확인해야합니다.contains

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


3
이 URL은 preview.tbwabox.co.nz/_v005/index.html#buying-a-car 와 같 으며 문자열에 "buying-a-car이지만 스크립트"가 작동하지 않는지 확인하고 싶습니다. ?
Vennsoh

6
@Vennsoh 님은 안 봐야하므로 "buying-a-car"를 찾을 수 window.location.hash없습니다 window.location.href. OP의 기능에서 해당 값을 바꾸십시오.
Adrian Gonzales

1
@JW 왜`> -1` 우리는`> 0`을 사용할 수 없습니까?
Elshan

5
엄밀히 말하면, 때문에 @Elshan, .href.indexOf("franky") 0의 값을 반환 할 수 있는 경우 .href"프랭키"로 시작합니다. 물론이 경우 .href항상 "http :"또는 "file :"과 같이 항상 프로토콜로 시작 하지는 않습니다 . 그럼에도 불구하고의 결과와 비교할 때는 항상> -1,> = 0 또는 선호하는! ==-1을 사용해야합니다 indexOf().
robinCTS

값 배열이 있고 Url에 값이 있는지 확인하고 조건과 일치하는 배열의 인덱스를 제공하려고합니다. 어떻게합니까? 감사.
Si8

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

할 것입니다. 또는 정규 표현식을 사용할 수 있습니다.

if (/franky/.test(window.location.href))

4
두 옵션 사이의 장단점은이 답변에 추가 될 것입니다.
Chris

그러나 정규 표현식을 사용하면 아무도 그것을 읽을 수 없습니다.)
RayLoveless

26

다음 indexOf과 같이 사용 하십시오.

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

href그렇지 않으면 문자열을 추가하는 것에 주목하십시오 .

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

23

이렇게 :

    <script type="text/javascript">
        $(document).ready(function () {
            if(window.location.href.indexOf("cart") > -1) 
            {
                 alert("your url contains the name franky");
            }
        });
    </script>

window.location.indexOf와 window.location.href.indexOf를 호출하는 것의 차이점은 무엇입니까?
starsplusplus

@starsplusplus 아무런 차이가 없습니다. window.location.href의 별칭입니다 window.location developer.mozilla.org/en-US/docs/Web/API/Window.location은
아드리안 곤잘레스

위의 내용은 저에게는 잘 작동하지만 두 가지 변수에 대해 두 가지 값을 모두 포함합니다.
Vinoth Narayan

1
@VinothNarayan if문장에 다른 조건을 추가 할 수 있습니다 . 확인하려면 그것을 가지고 모두, 당신은하고 연산자를 사용할 수 있습니다 &&: 자바 스크립트를 if( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 ) 이 개 파이프 문자 인 OR 연산자를 사용, 그것은 하나 또는 다른 값을 가지고 있는지 확인하려면|| if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
애드리안 곤잘레스

19

window.locationString은 아니지만 toString()메소드가 있습니다. 따라서 다음과 같이 할 수 있습니다.

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

또는

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

로부터 오래된 모질라 문서 :

위치 객체에는 현재 URL을 반환하는 toString 메소드가 있습니다. window.location에 문자열을 할당 할 수도 있습니다. 이는 대부분의 경우 문자열 인 것처럼 window.location으로 작업 할 수 있음을 의미합니다. 예를 들어, String 메소드를 호출해야하는 경우 명시 적으로 toString을 호출해야합니다.


2
Firefox 48에서 String.prototype.contains ()가 제거되었습니다. String.prototype.includes () 만 사용하십시오. 여기를보십시오
CaseyC

@CaseyC가 변경되었습니다. 감사!
Alin Purcaru

9

정규식 방법 :

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

또는 간단한 문장으로 다음을 사용할 수 있습니다.

if (location.href.match(/franky/)) {

웹 사이트가 로컬로 실행 중인지 서버에서 실행 중인지 테스트하는 데 사용합니다.

location.href.match(/(192.168|localhost).*:1337/)

이것은 href 가 AND를 포함 하는지 192.168또는 localhostAND가 뒤에 오는지 점검합니다 :1337.

보시다시피, 정규 표현식을 사용하면 조건이 조금 까다로울 때 다른 솔루션보다 장점이 있습니다.


좋은. if (window.parent.location.href.match (/ \? /)) {window.parent.location = window.parent.location.pathname;을 사용했습니다. } 그리고 그것은 아주 잘 작동합니다 ...
Tarik

또는 if(/franky/.test(location.href)) { /* regex matched */ }경기와 관련이없는 경우 사용 하는 것이 더 간결합니다 .
cchamberlain

예, 이 경우 test보다 확실히 더 깨끗 match합니다.
Stephan Bijzitter

6

document.URL당신 URL

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

6

이것을 시도하십시오, 더 짧고 정확하게 작동합니다 window.location.href:

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

또한 이전 URL을 확인하려는 경우 :

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

당신은 같은 대답을 주었기 때문에 @sixstarpro 어쩌면 분명히, 오 내가 모르는 downvote을 수행하지 않았지만 이 하나가 이전 18 개월 게시! 또한 추가 정보 document.referrer는 질문과 전혀 관련이 없습니다.
robinCTS

4

더 쉽게

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

3

이 시도:

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

3

indexOf를 사용해보십시오

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

검색을 시도 할 수도 있습니다 (정규 표현 식용).

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

2

javascript에서 URL을 가져 오려면 Window.location.href를 사용하십시오. 브라우저의 현재 URL 위치를 알려주는 속성입니다. 속성을 다른 것으로 설정하면 페이지가 리디렉션됩니다.

if (window.location.href.indexOf('franky') > -1) {
     alert("your url contains the name franky");
}

URL이 기본 페이지인지 확인하고 문자열 iam 확인은 표시되지 않습니다. 예를 들어 sample.com/homepage.aspx는 내 페이지이며 iam은 문자열 'homepage'를 찾고 있습니다. if ((loc.toString (). toUpperCase (). indexOf ( 'homepage')> -1)) {}은 정상적으로 작동하지만 sample.com (Im 여전히 homepage.aspx를 가리킴)의 Iam에서는 위의 코드가 작동하지 않습니다. 이 시나리오를 확인하는 방법도 도와주세요!
Sweta

2

나는을 만들고 그것을 boolean논리적으로 사용하고 싶다 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');
}

1

당신의 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');
                }

내가 알고하지 않았다 ~나는 그것을 보았다, 그래서 : " ~설정하는 트릭이다 indexOf(). '(falsy으로 찾을 수 없다는하면서) truthy에 발견 반환 값을이야 사람들이 그렇지 않은 번호를 잘라내는 자사의 부작용을 위해 사용 ..." - stackoverflow.com/a/12299678/3917091
정기 조

1

정규 표현식은 단어 경계 \b나 유사한 장치로 인해 많은 사람들에게 더 적합 합니다. 단어 경계는 어떤 때 발생 0-9, a-z, A-Z, _에있는 그면 다음 경기 때, 또는 라인 또는 문자열의 끝 또는 시작하기 영숫자 문자 커넥트.

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

를 사용 if(window.location.href.indexOf("sam")하면 무엇보다도 flotsamsame에 대한 일치 항목이 표시됩니다 . tom정규식없이 토마토와 내일 일치합니다.

대소 문자를 구분하는 것은을 제거하는 것만 큼 간단합니다 i.

또한 다른 필터를 추가하는 것만 큼 쉽습니다

if (location.href.match(/(?:\b|_)(?:franky|bob|billy|john|steve)(?:\b|_)/i))

에 대해 이야기합시다 (?:\b|_). 정규식은 일반적으로 정의 _A와 word character이 단어가 발생하지 않도록 경계. 우리는 이것을 (?:\b|_)다루기 위해 이것을 사용합니다 . 문자열을 찾 \b거나 양쪽에서 확인하십시오 _.

다른 언어는 다음과 같은 것을 사용해야 할 수도 있습니다

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.

이 모든 것이 말하는 것보다 쉽습니다

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

다른 언어의 정규 표현식은 지원 \p{L}하지만 자바 스크립트는 지원 하지 않으므로 외국어 문자를 훨씬 쉽게 검색 할 수 있습니다. 같은 것[^\p{L}](filters|in|any|alphabet)[^\p{L}]


정규 표현식의 유일한
단점

@RayLoveless 그래,없는 언어 (?#comments)와 freespacing # comments자바 스크립트처럼. 그러나 이것은 읽기 어렵지 않습니다. // 자바 스크립트에서 복잡한 정규식을 사용할 때 lol을 편집 할 수있는 주석이 달린 사본을 유지합니다.
Regular Joe

0

이 스크립트가 있다고 가정

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

그리고 URL 형식은 www.localhost.com/web_form_response.html?text_input=stack&over=flow

작성된 텍스트 <p id="response">stack


0

indexof () 메소드는 대소 문자를 구분하므로 문자열을 소문자 또는 대문자로 변환하는 것이 좋습니다. 대소 문자를 구분하지 않는 검색의 경우 대소 문자를 구분하지 않는 검색의 경우 다음과 같습니다.

var string= location.href;
var convertedString= string.toLowerCase();
 if(convertedString.indexOf(franky) != -1){
  alert("url has franky");
}
else{
 alert("url has no franky");
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.