Bagaimana cara memeriksa apakah URL berisi string yang diberikan?


361

Bagaimana saya bisa melakukan sesuatu seperti ini:

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

Jawaban:


657

Anda perlu menambahkan properti href dan periksa indexOfbukannyacontains

<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
Saya memiliki URL panjang seperti ini, preview.tbwabox.co.nz/_v005/index.html#buying-a-car dan saya ingin memeriksa apakah string tersebut memiliki "beli-mobil-tapi skrip" tidak berfungsi ?
Vennsoh

6
@Vennsoh Anda tidak dapat menemukan "membeli-a-car" karena Anda perlu melihat di window.location.hashtidak window.location.href. Cukup tukar nilai-nilai itu dalam fungsi OP.
Adrian Gonzales

1
@JW Kenapa`> -1` tidak bisakah kita menggunakan`> 0`?
Elshan

5
@ Elshan Karena, sebenarnya, .href.indexOf("franky") dapat mengembalikan nilai 0 jika .hrefdimulai dengan "franky". Tentu saja, dalam hal ini, tidak pernah seperti .hrefbiasanya dimulai dengan protokol, biasanya "http:" atau "file:". Meskipun demikian, Anda harus SELALU menggunakan> -1,> = 0 atau, preferensi saya,! == - 1 saat membandingkan dengan hasil indexOf().
robinCTS

Saya memiliki array nilai dan ingin melihat apakah Url memiliki nilai apa pun dan memberi saya indeks array yang cocok dengan kondisinya. Bagaimana aku melakukan itu? Terima kasih.
Si8

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

akan melakukannya. Atau, Anda bisa menggunakan regexp:

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

4
Pro / kontra antara kedua opsi ini akan menjadi tambahan yang bagus untuk jawaban ini.
Chris

Tetapi jika saya menggunakan ekspresi regex tidak akan ada yang bisa membacanya;)
RayLoveless

26

Anda akan menggunakan indexOfseperti ini:

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

Perhatikan juga penambahan hrefuntuk string jika tidak Anda akan lakukan:

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

23

seperti itu:

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

Apa perbedaan antara memanggil window.location.indexOf dan window.location.href.indexOf?
starsplusplus

@starsplusplus Tidak ada perbedaan. window.location.hrefadalah alias dari window.location developer.mozilla.org/en-US/docs/Web/API/Window.location
Adrian Gonzales

Yang di atas berfungsi dengan baik untuk saya tetapi untuk dua variabel cara memeriksa yang berisi kedua nilai
Vinoth Narayan

1
@VinothNarayan Anda cukup menambahkan kondisi lain ke ifpernyataan. Untuk memastikan keduanya, Anda dapat menggunakan operator AND, yang &&dalam Javascript: if( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 ) Untuk memeriksa apakah memiliki satu atau nilai lainnya, gunakan operator OR, yang merupakan dua karakter pipa|| if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
Adrian Gonzales

19

window.locationbukan String, tetapi memiliki toString()metode. Jadi Anda bisa melakukannya seperti ini:

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

atau

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

Dari dokumen Mozilla lama :

Objek lokasi memiliki metode toString yang mengembalikan URL saat ini. Anda juga dapat menetapkan string ke window.location. Ini berarti bahwa Anda dapat bekerja dengan window.location seolah-olah itu adalah string dalam kebanyakan kasus. Terkadang, misalnya ketika Anda perlu memanggil metode String di atasnya, Anda harus secara eksplisit memanggil toString.


2
Di Firefox 48, String.prototype.contains () telah dihapus. Gunakan String.prototype.includes () saja. Lihat Di Sini
CaseyC

@CaseyC Diubah. Terima kasih!
Alin Purcaru

9

Cara regex:

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

Atau dalam pernyataan sederhana yang dapat Anda gunakan:

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

Saya menggunakan ini untuk menguji apakah situs web berjalan secara lokal atau di server:

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

Ini memeriksa apakah href mengandung 192.168atau localhostDAN diikuti oleh :1337.

Seperti yang Anda lihat, menggunakan regex memiliki kelebihan dibandingkan solusi lain ketika kondisinya menjadi sedikit rumit.


Bagus. Saya menggunakan if (window.parent.location.href.match (/ \? /)) {Window.parent.location = window.parent.location.pathname; } dan itu bekerja dengan sangat baik ...
Tarik

Atau, rasanya lebih ringkas bagi saya untuk digunakan if(/franky/.test(location.href)) { /* regex matched */ }jika saya tidak melakukan apa-apa dengan pertandingan.
cchamberlain

Ya, testjelas lebih bersih daripada matchdalam hal ini.
Stephan Bijzitter

6

document.URLharus membuat Anda URLdan

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

6

Coba ini, lebih pendek dan berfungsi persis seperti window.location.href:

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

juga jika Anda ingin memeriksa URL sebelumnya:

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

@sixstarpro saya tidak melakukan downvote, tapi, oh saya tidak tahu, mungkin jelas karena Anda memberikan jawaban yang sama seperti yang satu ini diposting 18 bulan sebelumnya! Juga, info tambahan tentang document.referrersepenuhnya tidak relevan dengan pertanyaan.
robinCTS

4

Lebih mudah didapat

<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

Coba ini:

<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

Coba indexOf

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

Anda juga dapat mencoba mencari (untuk ekspresi reguler)

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

2

Gunakan Window.location.href untuk mengambil url di javascript. itu adalah properti yang akan memberi tahu Anda lokasi URL browser saat ini. Mengatur properti ke sesuatu yang berbeda akan mengarahkan halaman.

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

Cara memeriksa apakah url adalah laman default dan pengecekan string iam tidak terlihat. seperti misalnya sample.com/homepage.aspx adalah halaman saya dan saya mencari string 'homepage'. if ((loc.toString (). toUpperCase (). indexOf ('homepage')> -1)) {} berfungsi dengan baik tetapi ketika Iam di sample.com (yang masih mengarah ke homepage.aspx) kode di atas tidak akan berfungsi. Bagaimana cara memeriksa skenario ini juga? Tolong bantu!
Sweta

2

Saya suka membuat booleandan menggunakannya secara logis 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

Masukkan file js Anda

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

Saya tidak tahu ~, jadi saya mencarinya: " ~adalah trik untuk mengubah indexOf()nilai pengembalian yang ditemukan menjadi benar (sementara menjadikannya tidak ditemukan sebagai kepalsuan). Jika tidak, orang menggunakannya untuk efek sampingnya memotong angka ..." - stackoverflow.com/a/12299678/3917091
Regular Joe

1

Ekspresi Reguler akan lebih optimal bagi banyak orang karena batasan kata \batau perangkat serupa. Batas kata terjadi ketika salah 0-9, a-z, A-Z, _berada di sisi dari pertandingan berikutnya, atau ketika menghubungkan karakter alfanumerik dengan garis atau tali akhir atau awal.

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

Jika Anda menggunakan if(window.location.href.indexOf("sam"), Anda akan mendapatkan kecocokan untuk flotsamdan same, di antara kata lain. tomakan cocok dengan tomat dan besok, tanpa regex.

Membuatnya case-sensitive semudah menghapus i.

Selanjutnya, menambahkan filter lain semudah

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

Mari kita bicarakan (?:\b|_). RegEx biasanya didefinisikan _sebagai word charactersehingga tidak menyebabkan batas kata. Kami menggunakan ini (?:\b|_)untuk menangani ini. Untuk melihat apakah ia menemukan \batau _di kedua sisi string.

Bahasa lain mungkin perlu menggunakan sesuatu seperti

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.

Semua ini lebih mudah daripada mengatakannya

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

Citarasa Regular Expressions bahasa lain mendukung \p{L}tetapi javascript tidak, yang akan membuat tugas mendeteksi karakter asing lebih mudah. Sesuatu seperti[^\p{L}](filters|in|any|alphabet)[^\p{L}]


Satu-satunya sisi dari ekspresi reguler adalah "menulis saja" (mis. Tidak mungkin untuk membaca);)
RayLoveless

@RayLoveless Ya, dalam bahasa tanpa (?#comments)dan freespacing # commentsseperti javascript. Namun, yang ini tidak sulit dibaca. // Ketika saya menggunakan regex kompleks dalam javascript, saya menyimpan salinan komentar yang dapat saya edit lol.
Reguler Joe

0

Misalkan Anda memiliki skrip ini

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

Dan bentuk urlnya adalah www.localhost.com/web_form_response.html?text_input=stack&over=flow

Teks yang ditulis untuk <p id="response">menjadistack


0

Ini akan menjadi praktik yang baik jika Anda mengonversi string menjadi lebih rendah atau huruf besar karena metode indexof () peka huruf besar-kecil. Ini akan terjadi jika pencarian Anda tidak peka terhadap huruf besar-kecil Jadi untuk pencarian yang tidak peka terhadap huruf besar-kecil akan menjadi:

var string= location.href;
var convertedString= string.toLowerCase();
 if(convertedString.indexOf(franky) != -1){
  alert("url has franky");
}
else{
 alert("url has no franky");
 }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.