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>
Tanpa Rayuan
sumber
"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>

JW
sumber
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))
NickFitz
sumber
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){....}
Sarfraz
sumber
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>
Adrian Gonzales
sumber
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.

Alin Purcaru
sumber
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.

Stephan Bijzitter
sumber
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
} 
Suman
sumber
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
sumber
@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>
Wisnu Dev
sumber
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> 
Chandu
sumber
3

Coba indexOf

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

Anda juga dapat mencoba mencari (untuk ekspresi reguler)

if (foo.search("franky") >= 0)
{
  ...
}
Yoni Baciu
sumber
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");
}
Sudharsan S
sumber
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');
}
Ronnie Royston
sumber
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');
                }
alemac852
sumber
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}]

Joe biasa
sumber
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

Dhiraj Himani
sumber
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");
 }
GeniusGeek
sumber