Come verificare se l'URL contiene una determinata stringa?


361

Come potrei fare qualcosa del genere:

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

Risposte:


657

È necessario aggiungere la proprietà href e selezionare indexOfinvece dicontains

<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
Ho un URL lungo come questo, preview.tbwabox.co.nz/_v005/index.html#buying-a-car e voglio verificare se la stringa ha "acquisto di un'auto ma lo script" non funziona ?
Vennsoh,

6
@Vennsoh Tu non sei in grado di trovare "acquisto-a-car", perché è necessario guardare a window.location.hashnon window.location.href. Basta scambiare quei valori con la funzione di OP.
Adrian Gonzales,

1
@JW Perché`> -1` non possiamo usare`> 0`?
Elshan,

5
@Elshan Perché, a rigor di termini, .href.indexOf("franky") può restituire un valore di 0 se .hrefinizia con "francamente". Naturalmente, in questo caso, non funziona mai come .hrefsempre inizia con il protocollo, in genere "http:" o "file:". Nonostante ciò, dovresti SEMPRE usare> -1,> = 0 o, la mia preferenza,! == - 1 quando si confronta con il risultato di indexOf().
robinCTS

Ho un array di valore e voglio vedere se l'Url ha un valore qualsiasi e dammi l'indice dell'array che corrisponde alla condizione. Come lo faccio? Grazie.
Si8,

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

lo farebbe. In alternativa, è possibile utilizzare un regexp:

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

4
Un pro / contro tra le due opzioni sarebbe una bella aggiunta a questa risposta.
Chris

Ma se avessi usato un'espressione regex nessuno sarebbe in grado di leggerlo;)
RayLoveless

26

Useresti indexOfcosì:

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

Nota anche l'aggiunta di hrefper la stringa, altrimenti dovresti fare:

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

23

così:

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

Qual è la differenza tra chiamare window.location.indexOf e window.location.href.indexOf?
starsplusplus,

@starsplusplus Non c'è alcuna differenza. window.location.hrefè un alias di window.location developer.mozilla.org/en-US/docs/Web/API/Window.location
Adrian Gonzales

Quello sopra funziona bene per me, ma per due variabili come controllarne contiene entrambi i valori
Vinoth Narayan,

1
@VinothNarayan Puoi semplicemente aggiungere un'altra condizione ifall'istruzione. Per assicurarti che abbia entrambi, puoi usare l'operatore AND, che è &&in Javascript: if( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 ) Per verificare se ha uno o l'altro valore, usa l'operatore OR, che è due caratteri di pipe|| if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
Adrian Gonzales,

19

window.locationnon è una stringa, ma ha un toString()metodo. Quindi puoi farlo in questo modo:

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

o

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

Dai vecchi documenti di Mozilla :

Gli oggetti posizione hanno un metodo toString che restituisce l'URL corrente. Puoi anche assegnare una stringa a window.location. Ciò significa che puoi lavorare con window.location come se fosse una stringa nella maggior parte dei casi. A volte, ad esempio quando è necessario chiamare un metodo String su di esso, è necessario chiamare esplicitamente toString.


2
In Firefox 48, String.prototype.contains () è stato rimosso. Utilizzare solo String.prototype.includes (). Vedi qui
CaseyC

@CaseyC Changed. Grazie!
Alin Purcaru,

9

Il modo regex:

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

O in una semplice dichiarazione è possibile utilizzare:

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

Lo uso per verificare se il sito Web è in esecuzione localmente o su un server:

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

Controlla se l' href contiene 192.168o localhostAND è seguito da :1337.

Come puoi vedere, l'uso di regex ha i suoi vantaggi rispetto alle altre soluzioni quando la condizione diventa un po 'più complicata.


Bello. Ho usato if (window.parent.location.href.match (/ \? /)) {Window.parent.location = window.parent.location.pathname; } e funziona molto bene ...
Tarik,

In alternativa, mi sembra un po 'più conciso da usare if(/franky/.test(location.href)) { /* regex matched */ }se non sto facendo nulla con le partite.
cchamberlain,

Sì, testè decisamente più pulito che matchin questo caso.
Stephan Bijzitter,

6

document.URLdovrebbe procurarti il URLe

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

6

Prova questo, è più corto e funziona esattamente come window.location.href:

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

anche se vuoi controllare l'URL precedente:

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

@sixstarpro Non ho fatto il downvote, ma, oh non lo so, forse ovviamente perché hai dato la stessa risposta a quella pubblicata 18 mesi prima! Inoltre, le informazioni aggiuntive su document.referrersono completamente irrilevanti per la domanda.
robinCTS

4

Più facile diventa

<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

Prova questo:

<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

Prova indexOf

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

Puoi anche provare a cercare (per espressioni regolari)

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

2

Usa Window.location.href per prendere l'URL in JavaScript. è una proprietà che ti dirà la posizione corrente dell'URL del browser. L'impostazione della proprietà su qualcosa di diverso reindirizzerà la pagina.

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

Come verificare se un URL è una pagina predefinita e il controllo iam stringa non è visibile. come ad esempio sample.com/homepage.aspx è la mia pagina e iam alla ricerca della stringa "homepage". if ((loc.toString (). toUpperCase (). indexOf ('homepage')> -1)) {} funziona bene ma quando Iam su sample.com (che punta ancora a homepage.aspx) sopra il codice non funzionerà. Come verificare anche questo scenario? Aiutatemi!
Sweta,

2

Mi piace creare un booleane quindi usarlo in modo logico 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

Inserisci il tuo file 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');
                }

Non lo sapevo ~, quindi l'ho cercato: " ~è un trucco per trasformare indexOf()il valore di ritorno trovato in verità (mentre non viene trovato come falso). La gente altrimenti lo usa per il suo effetto collaterale di troncare i numeri ..." - stackoverflow.com/a/12299678/3917091
Regular Joe

1

Le espressioni regolari saranno più ottimali per molte persone a causa dei confini delle parole \bo di dispositivi simili. Limiti delle parole si verificano quando una delle 0-9, a-z, A-Z, _sono su quel lato della prossima partita, o quando un collega alfanumerici carattere alla linea o alla fine della stringa o all'inizio.

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

Se lo usi if(window.location.href.indexOf("sam"), otterrai corrispondenze per flotsame same, tra le altre parole. tomabbinerebbe pomodoro e domani, senza regex.

Renderlo sensibile al maiuscolo / minuscolo è semplice come rimuovere il i.

Inoltre, aggiungere altri filtri è facile come

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

Parliamo di (?:\b|_). RegEx in genere definisce _come word characterquindi non causa un limite di parole. Usiamo questo (?:\b|_)per affrontare questo. Per vedere se trova \bo _su entrambi i lati della stringa.

Altre lingue potrebbero aver bisogno di usare qualcosa di simile

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.

Tutto questo è più facile che dire

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

Le versioni di espressioni regolari di altre lingue supportano, \p{L}ma javascript no, il che renderebbe molto più semplice il compito di rilevare caratteri stranieri. Qualcosa di simile a[^\p{L}](filters|in|any|alphabet)[^\p{L}]


L'unico lato
negativo delle

@RayLoveless Sì, in lingue senza (?#comments)e freespacing # commentscome javascript. Tuttavia, questo non è difficile da leggere. // Quando uso un regex complesso in javascript, tengo una copia commentata che posso modificare lol.
Regolare Joe,

0

Supponiamo di avere questo script

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

E la forma dell'URL è www.localhost.com/web_form_response.html?text_input=stack&over=flow

Il testo scritto <p id="response">saràstack


0

Sarà buona norma convertire la stringa in minuscolo o maiuscolo poiché il metodo indexof () fa distinzione tra maiuscole e minuscole. Questo sarà se la tua ricerca non è sensibile al maiuscolo / minuscolo, quindi per una ricerca che non è sensibile al maiuscolo / minuscolo sarà:

var string= location.href;
var convertedString= string.toLowerCase();
 if(convertedString.indexOf(franky) != -1){
  alert("url has franky");
}
else{
 alert("url has no franky");
 }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.