Jak sprawdzić, czy adres URL zawiera podany ciąg?

361

Jak mogę zrobić coś takiego:

<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>
RayLoveless
źródło
"window.location.contains is not a function"
gen b.

Odpowiedzi:

656

Musisz dodać właściwość href i sprawdzić indexOfzamiastcontains

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

JW
źródło
3
Mam taki długi URL, Preview.tbwabox.co.nz/_v005/index.html#buying-a-car i chcę sprawdzić, czy ciąg ma napis „kupno samochodu, ale skrypt” nie działa ?
Vennsoh,
6
Jesteś @Vennsoh nie jesteśmy w stanie znaleźć „skup a-car”, bo trzeba spojrzeć na window.location.hashnie window.location.href. Po prostu zamień te wartości w funkcji OP.
Adrian Gonzales,
1
@JW Dlaczego`> -1` nie możemy użyć`> 0`?
Elshan,
5
@Elshan Ponieważ, ściśle mówiąc, .href.indexOf("franky") może zwrócić wartość 0, jeśli .hrefzaczyna się od „franky”. Oczywiście w tym przypadku nigdy nie .hrefzaczyna się tak jak zawsze od protokołu, zwykle „http:” lub „file:”. Mimo to powinieneś ZAWSZE używać> -1,> = 0 lub, według moich preferencji,! == - 1 w porównaniu z wynikiem indexOf().
robinCTS
Mam tablicę wartości i chcę sprawdzić, czy adres URL ma jakąkolwiek wartość, i podać mi indeks tablicy pasujący do warunku. Jak mogę to zrobić? Dzięki.
Si8
101
if (window.location.href.indexOf("franky") != -1)

zrobiłbym to. Alternatywnie możesz użyć wyrażenia regularnego:

if (/franky/.test(window.location.href))
NickFitz
źródło
4
Plusy / minusy między tymi dwiema opcjami byłyby miłym dodatkiem do tej odpowiedzi.
Chris
Ale gdybym użył wyrażenia regularnego, nikt nie byłby w stanie go odczytać;)
RayLoveless
26

Użyłbyś indexOftak:

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

Zwróć także uwagę na dodanie hrefciągu, w przeciwnym razie zrobiłbyś:

if(window.location.toString().indexOf("franky") != -1){....}
Sarfraz
źródło
23

tak:

    <script type="text/javascript">
        $(document).ready(function () {
            if(window.location.href.indexOf("cart") > -1) 
            {
                 alert("your url contains the name franky");
            }
        });
    </script>
Adrian Gonzales
źródło
Jaka jest różnica między wywołaniem window.location.indexOf i window.location.href.indexOf?
starsplusplus
@starsplusplus Nie ma żadnej różnicy. window.location.hrefto pseudonim window.location developer.mozilla.org/en-US/docs/Web/API/Window.location
Adrian Gonzales
Powyższy działa dla mnie dobrze, ale dla dwóch zmiennych, jak sprawdzić, czy zawiera obie wartości
Vinoth Narayan
1
@VinothNarayan Możesz po prostu dodać kolejny warunek do ifwyciągu. Aby upewnić się, że ma oba, możesz użyć operatora AND, który jest &&w JavaScript: if( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 ) Aby sprawdzić, czy ma jedną lub drugą wartość, użyj operatora OR, który jest dwoma znakami potoku|| if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
Adrian Gonzales,
19

window.locationnie jest ciągiem, ale ma toString()metodę. Możesz to zrobić w ten sposób:

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

lub

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

Ze starych dokumentów Mozilli :

Obiekty położenia mają metodę toString zwracającą bieżący adres URL. Możesz także przypisać ciąg do window.location. Oznacza to, że możesz pracować z window.location tak, jakby w większości przypadków był to ciąg znaków. Czasami, na przykład, gdy trzeba wywołać metodę String, należy jawnie wywołać metodę toString.

Alin Purcaru
źródło
2
W przeglądarce Firefox 48 parametr String.prototype.contains () został usunięty. Używaj tylko String.prototype.include (). Zobacz tutaj
CaseyC
@CaseyC Zmieniono. Dzięki!
Alin Purcaru,
9

Sposób wyrażenia regularnego:

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

Lub w prostym zestawieniu, którego możesz użyć:

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

Używam tego do sprawdzenia, czy witryna działa lokalnie, czy na serwerze:

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

Sprawdza, czy href zawiera albo, 192.168czy localhostAND :1337.

Jak widać, użycie wyrażenia regularnego ma swoje zalety w porównaniu z innymi rozwiązaniami, gdy warunek staje się nieco trudniejszy.

Stephan Bijzitter
źródło
Miły. Użyłem if (window.parent.location.href.match (/ \? /)) {Window.parent.location = window.parent.location.pathname; } i działa bardzo dobrze ...
Tarik
Alternatywnie, wydaje mi się bardziej zwięzłe w użyciu, if(/franky/.test(location.href)) { /* regex matched */ }jeśli nie robię nic z dopasowaniami.
cchamberlain
Tak, testjest zdecydowanie czystszy niż matchw tym przypadku.
Stephan Bijzitter
6

document.URLpowinienem dać ci URLi

if(document.URL.indexOf("searchtext") != -1) {
    //found
} else {
    //nope
} 
Suman
źródło
6

Spróbuj tego, jest krótszy i działa dokładnie tak jak window.location.href:

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

także jeśli chcesz sprawdzić poprzedni adres URL:

if (document.referrer.indexOf("franky") > -1) { ... }
sixstarpro
źródło
@sixstarpro Nie zrobiłem przegłosowania, ale, och nie wiem, może oczywiście dlatego, że dałeś taką samą odpowiedź jak ta opublikowana 18 miesięcy wcześniej! Ponadto dodatkowe informacje na temat document.referrersą całkowicie nieistotne dla pytania.
robinCTS
4

Łatwiej to robi

<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>
Vishnu Dev
źródło
3

Spróbuj tego:

<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> 
Chandu
źródło
3

Wypróbuj indexOf

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

Możesz także spróbować wyszukać (wyrażenia regularne)

if (foo.search("franky") >= 0)
{
  ...
}
Yoni Baciu
źródło
2

Użyj Window.location.href, aby pobrać adres URL w javascript. jest to właściwość, która poinformuje Cię o bieżącej lokalizacji adresu URL przeglądarki. Ustawienie innej właściwości spowoduje przekierowanie strony.

if (window.location.href.indexOf('franky') > -1) {
     alert("your url contains the name franky");
}
Sudharsan S.
źródło
Jak sprawdzić, czy URL jest stroną domyślną, a sprawdzanie iam ciągu nie jest widoczne. jak na przykład sample.com/homepage.aspx to moja strona i szukam ciągu „strona główna”. if ((loc.toString (). toUpperCase (). indexOf ('strona główna')> -1)) {} działa dobrze, ale gdy Iam na sample.com (który nadal wskazuje na homepage.aspx) powyższy kod nie działa. Jak sprawdzić również ten scenariusz? Proszę o pomoc!
Sweta
2

Lubię tworzyć booleana następnie używać tego w logiczny sposób 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');
}
Ronnie Royston
źródło
1

Wstaw plik 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');
                }
alemac852
źródło
Nie wiedziałem ~, więc spojrzałem na to: ~jest sztuczką, aby przekształcić indexOf()znalezioną wartość zwracaną w prawdę (jednocześnie czyniąc ją niezrozumiałą jako fałsz). Ludzie inaczej używają jej ze względu na efekt uboczny obcięcia liczb ...” - stackoverflow.com/a/12299678/3917091
Zwykły Joe
1

Wyrażenia regularne będą bardziej optymalne dla wielu osób ze względu na granice słów \blub podobne urządzenia. Granice słów wystąpić, gdy którykolwiek z 0-9, a-z, A-Z, _są na tej stronie następnego meczu, lub gdy alfanumerycznym łączy postać do linii lub na końcu lub na początku łańcucha.

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

Jeśli używasz if(window.location.href.indexOf("sam"), dostaniesz wyniki dla flotsami same, między innymi słowami. tompasuje do pomidorów i jutra, bez wyrażenia regularnego.

Rozróżnianie wielkości liter jest tak proste, jak usunięcie i.

Ponadto dodawanie innych filtrów jest tak proste, jak

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

Porozmawiajmy o tym (?:\b|_). RegEx zazwyczaj definiuje _jako word charactertak, że nie powoduje granicy słowa. Używamy tego, (?:\b|_)aby sobie z tym poradzić. Aby sprawdzić, czy znajdzie \balbo _po dowolnej stronie ciągu.

Inne języki mogą wymagać użycia czegoś takiego

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.

Wszystko to jest łatwiejsze niż mówienie

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

Smaki innych wyrażeń w innych językach obsługują, \p{L}ale javascript nie obsługuje, co znacznie ułatwi wykrywanie obcych znaków. Coś jak[^\p{L}](filters|in|any|alphabet)[^\p{L}]

Zwykły Joe
źródło
Jedyną wadą wyrażeń regularnych jest to, że są one „tylko do zapisu” (tzn. Niemożliwe do odczytania);)
RayLoveless,
@RayLoveless Tak, w językach bez (?#comments)i spacji # commentsjak javascript. Jednak ten nie jest trudny do odczytania. // Kiedy używam złożonego wyrażenia regularnego w javascript, zachowuję skomentowaną kopię, którą mogę edytować lol.
Regularne Joe
0

Załóżmy, że masz ten skrypt

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

A forma adresu URL jest www.localhost.com/web_form_response.html?text_input=stack&over=flow

Tekst do <p id="response">będziestack

Dhiraj Himani
źródło
0

Dobrą praktyką będzie konwersja łańcucha na małe lub wielkie litery, ponieważ metoda indexof () rozróżnia małe i wielkie litery. Będzie tak, jeśli wyszukiwanie nie uwzględnia wielkości liter w umyśle. Więc wyszukiwanie, które nie rozróżnia wielkości liter, będzie następujące:

var string= location.href;
var convertedString= string.toLowerCase();
 if(convertedString.indexOf(franky) != -1){
  alert("url has franky");
}
else{
 alert("url has no franky");
 }
GeniusGeek
źródło