Wie überprüfe ich, ob die URL eine bestimmte Zeichenfolge enthält?


361

Wie könnte ich so etwas machen:

<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"
Gen b.

Antworten:


656

Sie müssen die Eigenschaft href hinzufügen und indexOfstattdessen überprüfencontains

<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
Ich habe eine lange URL wie diese, Vorschau.tbwabox.co.nz/_v005/index.html#buying-a-car, und ich möchte überprüfen, ob die Zeichenfolge "Auto kaufen, aber das Skript" nicht funktioniert ?
Vennsoh

6
@Vennsoh Sie sind nicht in der Lage „Kauf-a-car“ zu finden , weil Sie zu schauen in brauchen window.location.hashnicht window.location.href. Tauschen Sie diese Werte einfach in der OP-Funktion aus.
Adrian Gonzales

1
@JW Warum`> -1` können wir nicht`> 0` verwenden?
Elshan

5
@Elshan Weil genau genommen .href.indexOf("franky") ein Wert von 0 zurückgegeben werden kann, wenn .hrefmit "franky" begonnen wird. In diesem Fall .hrefbeginnt dies natürlich nie wie immer mit dem Protokoll, normalerweise "http:" oder "file:". Trotzdem sollten Sie IMMER> -1,> = 0 oder, meine Präferenz ,! == - 1 verwenden, wenn Sie mit dem Ergebnis von vergleichen indexOf().
RobinCTS

Ich habe ein Array von Werten und möchte sehen, ob die URL einen der Werte hat, und mir den Index des Arrays geben, der der Bedingung entspricht. Wie mache ich das? Vielen Dank.
Si8

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

würde es tun. Alternativ können Sie einen regulären Ausdruck verwenden:

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

4
Ein Für / Wider zwischen den beiden Optionen wäre eine schöne Ergänzung zu dieser Antwort.
Chris

Aber wenn ich einen regulären Ausdruck verwenden würde, könnte ihn niemand lesen;)
RayLoveless

26

Sie würden so verwenden indexOf:

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

Beachten Sie auch das Hinzufügen von hreffür die Zeichenfolge, da Sie sonst Folgendes tun würden:

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

23

wie so:

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

Was ist der Unterschied zwischen dem Aufruf von window.location.indexOf und window.location.href.indexOf?
Starsplusplus

@starsplusplus Es gibt keinen Unterschied. window.location.hrefist ein Alias ​​von window.location developer.mozilla.org/en-US/docs/Web/API/Window.location
Adrian Gonzales

Das obige funktioniert gut für mich, aber für zwei Variablen, wie man es überprüft, enthält es beide Werte
Vinoth Narayan

1
@VinothNarayan Sie können der ifAnweisung einfach eine weitere Bedingung hinzufügen . Um sicherzustellen, dass beide vorhanden sind, können Sie den Operator AND &&in Javascript verwenden: if( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 ) Um zu überprüfen, ob der eine oder andere Wert vorhanden ist, verwenden Sie den Operator OR, der aus zwei Pipe-Zeichen besteht|| if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
Adrian Gonzales

19

window.locationist kein String, hat aber eine toString()Methode. So können Sie es machen:

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

oder

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

Aus den alten Mozilla-Dokumenten :

Standortobjekte verfügen über eine toString-Methode, die die aktuelle URL zurückgibt. Sie können window.location auch eine Zeichenfolge zuweisen. Dies bedeutet, dass Sie mit window.location so arbeiten können, als wäre es in den meisten Fällen eine Zeichenfolge. Manchmal, wenn Sie beispielsweise eine String-Methode aufrufen müssen, müssen Sie explizit toString aufrufen.


2
In Firefox 48 wurde String.prototype.contains () entfernt. Verwenden Sie nur String.prototype.includes (). Siehe hier
CaseyC

@CaseyC geändert. Vielen Dank!
Alin Purcaru

9

Der Regex-Weg:

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

Oder in einer einfachen Aussage könnten Sie verwenden:

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

Ich verwende dies, um zu testen, ob die Website lokal oder auf einem Server ausgeführt wird:

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

Dies prüft, ob die href entweder 192.168oder localhostAND enthält, gefolgt von :1337.

Wie Sie sehen können, hat die Verwendung von Regex seine Vorteile gegenüber den anderen Lösungen, wenn die Bedingung etwas schwieriger wird.


Nett. Ich habe if (window.parent.location.href.match (/ \? /)) {Window.parent.location = window.parent.location.pathname; } und es funktioniert sehr gut ...
Tarik

Alternativ fühlt es sich für mich etwas prägnanter an, if(/franky/.test(location.href)) { /* regex matched */ }wenn ich mit den Streichhölzern nichts mache.
Cchamberlain

Ja, testist definitiv sauberer als matchin diesem Fall.
Stephan Bijzitter

6

document.URLsollte dir das URLund bringen

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

6

Versuchen Sie dies, es ist kürzer und funktioniert genau wie window.location.href:

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

auch wenn Sie die vorherige URL überprüfen möchten:

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

@sixstarpro Ich habe das Downvote nicht gemacht, aber oh, ich weiß nicht, vielleicht offensichtlich, weil du die gleiche Antwort gegeben hast wie diese, die vor 18 Monaten gepostet wurde! Außerdem sind die zusätzlichen Informationen document.referrerzu für die Frage völlig irrelevant.
RobinCTS

4

Einfacher geht es

<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

Versuche dies:

<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

Versuchen Sie indexOf

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

Sie können auch versuchen zu suchen (nach regulären Ausdrücken)

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

2

Verwenden Sie Window.location.href, um die URL in Javascript zu übernehmen. Es ist eine Eigenschaft, die Ihnen den aktuellen URL-Speicherort des Browsers anzeigt. Wenn Sie die Eigenschaft auf einen anderen Wert einstellen, wird die Seite umgeleitet.

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

So überprüfen Sie, ob eine URL die Standardseite ist und ob die Überprüfung der Zeichenfolge nicht sichtbar ist. wie zum Beispiel sample.com/homepage.aspx ist meine Seite und ich suche nach String 'homepage'. if ((loc.toString (). toUpperCase (). indexOf ('homepage')> -1)) {} funktioniert einwandfrei, aber wenn Iam auf sample.com (das immer noch auf homepage.aspx zeigt) über dem Code nicht funktioniert. Wie kann man auch nach diesem Szenario suchen? Bitte helfen Sie!
Sweta

2

Ich mag es, eine zu erstellen booleanund diese dann in einer logischen zu verwenden 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

Fügen Sie Ihre js-Datei ein

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

Ich wusste es nicht ~, also habe ich es nachgeschlagen: "Es ~ist ein Trick, indexOf()den gefundenen Rückgabewert in wahr zu verwandeln (während er nicht als falsch gefunden wird). Die Leute verwenden ihn ansonsten wegen seiner Nebenwirkung, Zahlen abzuschneiden ..." - stackoverflow.com/a/12299678/3917091
Regular Joe

1

Reguläre Ausdrücke sind aufgrund von Wortgrenzen \boder ähnlichen Geräten für viele Menschen optimaler . Wortgrenzen auftreten , wenn eine von 0-9, a-z, A-Z, _auf sind die Seite des nächsten Spiels, oder wenn ein alphanumerisches Zeichen Connects zu Zeile oder Zeichenfolge Ende oder am Anfang.

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

Wenn Sie verwenden if(window.location.href.indexOf("sam"), erhalten Sie Übereinstimmungen für flotsamund sameunter anderem. tomwürde zu Tomate und morgen passen, ohne Regex.

Die Groß- und Kleinschreibung zu beachten ist so einfach wie das Entfernen der i.

Das Hinzufügen weiterer Filter ist so einfach wie

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

Reden wir darüber (?:\b|_). RegEx wird normalerweise _als definiert, word charactersodass keine Wortgrenze entsteht. Wir nutzen dies, (?:\b|_)um damit umzugehen. Um zu sehen, ob es entweder \boder _auf beiden Seiten der Zeichenfolge findet.

Andere Sprachen müssen möglicherweise so etwas wie verwenden

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.

All dies ist einfacher als zu sagen

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

Die Geschmacksrichtungen regulärer Ausdrücke in anderen Sprachen werden unterstützt \p{L}, Javascript jedoch nicht. Dies würde die Erkennung von Fremdzeichen erheblich erleichtern. Etwas wie[^\p{L}](filters|in|any|alphabet)[^\p{L}]


Der einzige
Nachteil

@ RayLoveless Ja, in Sprachen ohne (?#comments)und freiberuflich # commentswie Javascript. Dieser ist jedoch nicht schwer zu lesen. // Wenn ich einen komplexen regulären Ausdruck in Javascript verwende, behalte ich eine kommentierte Kopie, die ich bearbeiten kann lol.
Regular Joe

0

Angenommen, Sie haben dieses Skript

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

Und die URL-Form ist www.localhost.com/web_form_response.html?text_input=stack&over=flow

Der Text, an den geschrieben wird, <p id="response">wird seinstack


0

Es wird empfohlen, die Zeichenfolge in Klein- oder Großbuchstaben umzuwandeln, da bei der indexof () -Methode zwischen Groß- und Kleinschreibung unterschieden wird. Dies ist der Fall, wenn Ihre Suche nicht zwischen Groß- und Kleinschreibung unterscheidet. Bei einer Suche, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird, gilt Folgendes:

var string= location.href;
var convertedString= string.toLowerCase();
 if(convertedString.indexOf(franky) != -1){
  alert("url has franky");
}
else{
 alert("url has no franky");
 }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.