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 but the script」が機能していないかどうかを確認したい?
Vennsoh

6
@Vennsohではwindow.location.hashなく調べる必要があるため、「車の購入」を見つけることができませんwindow.location.href。OPの関数でこれらの値を交換するだけです。
エイドリアンゴンザレス

1
@JWなぜ `> -1`は使用できない`> 0`?
Elshan 2017

5
@Elshan厳密に言えば、「franky」で始まる場合は.href.indexOf("franky") 値0を返す可能性があるため.hrefです。もちろん、この場合、.href通常は「http:」または「file:」のようにプロトコルで始まることはありません。それにもかかわらず、の結果と比較するときは、常に> -1、> = 0、または私の好みでは!==-1を使用する必要がありindexOf()ます。
robinCTS 2017

値の配列があり、URLに値があるかどうかを確認し、条件に一致する配列のインデックスを取得します。それ、どうやったら出来るの?ありがとう。
Si8 2018年

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

それを行うでしょう。または、正規表現を使用することもできます。

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

4
2つのオプション間の長所/短所は、この回答に素晴らしい追加です。
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.hrefwindow.location developer.mozilla.org/en-US/docs/Web/API/Window.location
Adrian Gonzales

1以上の罰金私のために動作しますが、その確認方法を2つの変数の両方の値が含まれています
Vinothナラヤンに

1
@VinothNarayan ifステートメントに別の条件を追加するだけです。両方が含まれていることを確認するには&&、Javascriptの AND演算子を使用できますif( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 ) 。1つまたは他の値があるかどうかを確認するには、2つのパイプ文字であるOR演算子を使用します|| if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
Adrian Gonzales

19

window.location文字列ではありませんが、toString()メソッドがあります。したがって、次のように行うことができます。

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

または

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

古いMozillaのドキュメント

Locationオブジェクトには、現在のURLを返すtoStringメソッドがあります。文字列をwindow.locationに割り当てることもできます。つまり、ほとんどの場合、文字列であるかのようにwindow.locationを操作できます。場合によっては、たとえばStringメソッドを呼び出す必要がある場合は、明示的にtoStringを呼び出す必要があります。


2
Firefox 48では、String.prototype.contains()が削除されました。String.prototype.includes()のみを使用してください。こちらをご覧ください
CaseyC 2017

@CaseyCが変更されました。ありがとう!
Alin Purcaru

9

正規表現の方法:

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

または、次のような簡単なステートメントで使用できます。

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

これを使用して、Webサイトがローカルで実行されているかサーバーで実行されているかをテストします。

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

これにより、hrefにが含まれているか192.168localhostANDの後にが含まれているかがチェックされ:1337ます。

ご覧のように、条件が少し複雑になると、正規表現を使用することは他のソリューションよりも優れています。


いいね。if(window.parent.location.href.match(/ \?/)){window.parent.location = window.parent.location.pathname; }そしてそれは非常にうまく機能します...
Tarik

または、if(/franky/.test(location.href)) { /* regex matched */ }マッチで何もしない場合に使用する方が少し簡潔に感じられます。
チェンバレン2016年

ええ、この場合testよりも明らかにきれいですmatch
ステファンビジッター

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) { ... }

あなたは同じ答えを与えたので、多分、明らかに、私はdownvoteをしませんでした、しかし、ああ、私は知りません@sixstarpro この1つは 18ヶ月前に投稿しました!また、に関する追加情報document.referrerは質問とは完全に無関係です。
robinCTS 2017

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

Window.location.hrefを使用して、JavaScriptのURLを取得します。これは、ブラウザの現在の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)){}は正常に動作しますが、上記のコードでIamがsample.com(homepage.aspxをまだ指している)の場合は機能しません。このシナリオも確認するにはどうすればよいですか?
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()です(見つからないものを偽物として作成しています)。それ以外の場合は、数値を切り捨てるという副作用のために使用します...」 - stackoverflow.com/a/12299678/3917091
正規ジョー

1

正規表現は、単語の境界\bや類似のデバイスのため、多くの人にとってより最適です。単語の境界は、のいずれかが発生したときに0-9a-zA-Z_上にあるその辺次の試合の場合、または英数字の文字結ぶ線または文字列末尾または先頭に。

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

を使用すると、とりわけとのif(window.location.href.indexOf("sam")一致が表示されます。正規表現なしでトマトと明日に一致します。flotsamsametom

大文字と小文字を区別するのは、を削除するのと同じくらい簡単iです。

さらに、他のフィルターを追加するのは簡単です

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

について話しましょう(?:\b|_)。RegExは通常、_として定義する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}いますが、JavaScriptはサポートされていません。これにより、外来文字を検出するタスクがはるかに簡単になります。何かのようなもの[^\p{L}](filters|in|any|alphabet)[^\p{L}]


正規表現の唯一の
欠点

@RayLovelessええ、JavaScriptのない言語(?#comments)やフリースペースの言語では# comments。しかし、これは読みにくいものではありません。// JavaScriptで複雑な正規表現を使用すると、編集可能なコメント付きのコピーが残ります。
レギュラージョー

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.