URL'nin belirli bir dize içerip içermediğini nasıl kontrol edebilirim?


361

Nasıl böyle bir şey yapabilirim:

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

Yanıtlar:


657

Href özelliği eklemeniz ve indexOfyerine kontrol etmeniz gerekiyorcontains

<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
Bunun gibi uzun bir URL var, önizleme.tbwabox.co.nz/_v005/index.html# buying-a-car ve dize "bir araba satın alma ama komut dosyası" çalışmıyor olup olmadığını kontrol etmek istiyorum ?
Vennsoh

6
@Vennsoh "Bir araba satın almak" bulamıyorsunuz çünkü içeri bakmanız window.location.hashgerekmiyor window.location.href. Bu değerleri OP işlevinde değiştirin.
Adrian Gonzales

1
@JW Neden `> -1``> 0` kullanamıyoruz?
Elshan

5
Açık konuşmak gerekirse, Çünkü @Elshan, .href.indexOf("franky") 0 değerini döndürebilir eğer .href"franky" ile başlar. Tabii ki, bu durumda, .hrefher zamanki gibi , genellikle "http:" veya "file:" protokolüyle başlar. Buna rağmen, sonucu ile karşılaştırırken DAİMA> -1,> = 0 veya tercihim,! == - 1 kullanmalısınız indexOf().
robinCTS

Ben bir değer dizisi var ve Url değeri herhangi olup olmadığını görmek ve bana koşulu eşleşen dizinin dizin vermek istiyorum. Bunu nasıl yaparım? Teşekkürler.
Si8

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

yapardı. Alternatif olarak bir normal ifade kullanabilirsiniz:

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

4
İki seçenek arasındaki artıları / eksileri bu cevaba güzel bir ek olacaktır.
Chris

Ama eğer bir regex ifadesi kullansaydım kimse okuyamazdı;)
RayLoveless

26

Bunun indexOfgibi kullanırsınız :

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

Ayrıca hrefdize için ekleme dikkat edin aksi takdirde:

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

23

şöyle:

    <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 ve window.location.href.indexOf'u çağırmak arasındaki fark nedir?
starsplusplus

@starsplusplus Hiçbir fark yok. developer.mozilla.org/tr-TR/docs/Web/API/Window.locationwindow.location.hrefwindow.location
Adrian Gonzales

Yukarıdaki bir benim için iyi çalışıyor ama nasıl kontrol etmek için iki değişken için her iki değeri içerir
Vinoth Narayan

1
@VinothNarayan İfadeye başka bir koşul ekleyebilirsiniz if. Her ikisinin de olduğundan emin olmak için, &&Javascript'te bulunan AND işlecini kullanabilirsiniz : if( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 ) Bir veya başka bir değere sahip olup olmadığını kontrol etmek için, iki karakterli OR işleci kullanın|| if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
Adrian Gonzales

19

window.locationbir String değil, bir toString()yöntemi var. Böylece bunu şöyle yapabilirsiniz:

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

veya

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

Gönderen eski Mozilla docs :

Konum nesneleri, geçerli URL'yi döndüren bir toString yöntemine sahiptir. Window.location öğesine de bir dize atayabilirsiniz. Bu, window.location ile çoğu durumda bir dize gibi çalışabileceğiniz anlamına gelir. Bazen, örneğin üzerinde bir String yöntemi çağırmanız gerektiğinde, açıkça toString öğesini çağırmanız gerekir.


2
Firefox 48'de String.prototype.contains () kaldırıldı. Yalnızca String.prototype.includes () kullanın. Buraya Bakın
CaseyC

@CaseyC Değişti. Teşekkürler!
Alin Purcaru

9

Normal ifade yolu:

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

Veya basit bir ifadeyle şunları kullanabilirsiniz:

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

Web sitesinin yerel olarak mı yoksa bir sunucuda mı çalıştığını test etmek için bunu kullanıyorum:

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

Bu href ya 192.168da localhostAND içerip içermediğini kontrol eder :1337.

Gördüğünüz gibi, regex kullanmanın, durum biraz daha zorlaştığında diğer çözümlere göre avantajları vardır.


Güzel. (Window.parent.location.href.match (/ \? /)) {Window.parent.location = window.parent.location.pathname; } ve çok iyi çalışıyor ...
Tarik

Alternatif olarak, if(/franky/.test(location.href)) { /* regex matched */ }maçlarla hiçbir şey yapmazsam kullanmak bana biraz daha özlü geliyor .
cchamberlain

Evet, testkesinlikle matchbu durumda olduğundan daha temiz .
Stephan Bijzitter

6

document.URLseni almalı URLve

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

6

Bunu deneyin, daha kısa ve tam olarak şu şekilde çalışır window.location.href:

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

önceki URL'yi kontrol etmek istiyorsanız:

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

@sixstarpro Downvote yapmadım, ama, oh, bilmiyorum, belki de açıkçası bu cevabı 18 ay önce gönderdiğin aynı cevabı verdiğiniz için ! Ayrıca, hakkında ek bilgi document.referrersoru ile tamamen ilgisizdir.
robinCTS

4

Daha kolay

<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

Bunu dene:

<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

İndexOf'u deneyin

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

Ayrıca aramayı da deneyebilirsiniz (normal ifadeler için)

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

2

Javascript url almak için Window.location.href kullanın. size tarayıcının geçerli URL konumunu bildiren bir özelliktir. Özelliği farklı bir şeye ayarlamak sayfayı yeniden yönlendirir.

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

Bir URL'nin varsayılan sayfa olup olmadığını ve dize iam denetiminin görünüp görünmediğini denetleme. örneğin sample.com/homepage.aspx benim sayfam ve iam 'ana sayfa' dizesini arıyorum. if ((loc.toString (). toUpperCase (). indexOf ('homepage')> -1)) {} iyi çalışıyor ancak yukarıdaki sample.com üzerindeki (hala homepage.aspx'i gösteriyor) yukarıdaki kod çalışmazsa. Bu senaryo için nasıl kontrol edilir? Lütfen yardım edin!
Sweta

2

booleanBir mantıksal olarak bir oluşturmak ve kullanmak istiyorum 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 dosyanızı koyun

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

Bilmiyordum ~ben baktım bu yüzden,: " ~açmak için bir hüner indexOf(). '(Falsy olarak-bulunmadı yaparken) truthy içine bulundu dönüş değeri s İnsanlar aksi numaralarını kısaltılmasının yan etkisi için kullanmak ..." - stackoverflow.com/a/12299678/3917091
Regular Joe

1

Düzenli İfadeler, kelime sınırları \bveya benzer cihazlar nedeniyle birçok insan için daha uygun olacaktır . Sözcük sınırları herhangi ortaya 0-9, a-z, A-Z, _üzerinde o tarafa gelecek maçın veya zaman çizgisi veya dize sonu veya başlayan bir alfanümerik karakter bağlandığı.

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

Eğer kullanırsanız if(window.location.href.indexOf("sam"), flotsamve samediğerlerinin yanında ve için eşleşme elde edersiniz . tomregex olmadan domates ve yarın maç.

Büyük / küçük harfe duyarlı hale getirmek, çıkarmak kadar basittir i.

Ayrıca, diğer filtreleri eklemek kadar kolay

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

Hadi konuşalım (?:\b|_). RegEx genellikle bir sözcük sınırına neden olmaması için _bir tanım olarak tanımlar word character. Bununla (?:\b|_)başa çıkmak için bunu kullanıyoruz. Eğer o ya buluntular görmek için \bya _dize her iki tarafında.

Diğer diller gibi bir şey kullanmaları gerekebilir

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.

Bütün bunlar söylemekten daha kolay

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

Diğer dillerin Düzenli İfadeler lezzetleri desteklenir, \p{L}ancak javascript desteklemez , bu da yabancı karakterleri algılama görevini daha kolay hale getirir. Gibi bir şey[^\p{L}](filters|in|any|alphabet)[^\p{L}]


Düzenli ifadelerin tek tarafı onlar "sadece yazma" (yani. İmkansız);)
RayLoveless

@RayLoveless Evet, javascript gibi (?#comments)ve serbest bırakılan dillerde # comments. Ancak, bunu okumak zor değil. // Javascript karmaşık bir regex kullandığımda, lol düzenleyebilirsiniz yorum bir kopyasını tutmak.
Düzenli Joe

0

Bu komut dosyasının olduğunu varsayalım

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

Ve url formu www.localhost.com/web_form_response.html?text_input=stack&over=flow

Yazılı metin <p id="response">olacakstack


0

İndexof () yöntemi büyük / küçük harfe duyarlı olduğu için dizenizi küçük veya büyük harfe dönüştürürseniz iyi bir uygulama olacaktır. Bu, aramanız büyük / küçük harfe duyarlı zihin dolu değilse, büyük / küçük harfe duyarlı olmayan bir arama için şöyle olacaktır:

var string= location.href;
var convertedString= string.toLowerCase();
 if(convertedString.indexOf(franky) != -1){
  alert("url has franky");
}
else{
 alert("url has no franky");
 }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.