Làm cách nào để kiểm tra xem URL có chứa một chuỗi đã cho không?


361

Làm thế nào tôi có thể làm một cái gì đó như thế này:

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

Câu trả lời:


656

Bạn cần thêm thuộc tính và kiểm tra indexOfthay vìcontains

<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
Tôi có một URL dài như thế này, preview.tbwabox.co.nz/_v005/index.html#buying-a-car và tôi muốn kiểm tra xem chuỗi có "buy-a-car nhưng script" không hoạt động ?
Vennsoh

6
@Vennsoh Bạn không thể tìm thấy "mua-một-xe" bởi vì bạn cần phải xem xét trong window.location.hashkhông window.location.href. Chỉ cần trao đổi các giá trị đó trong chức năng của OP.
Adrian Gonzales

1
@JW Tại sao`> -1` chúng ta không thể sử dụng`> 0`?
El Sơn

5
@Elshan Bởi vì, nói đúng ra, .href.indexOf("franky") có thể trả về giá trị 0 nếu .hrefbắt đầu bằng "thẳng thắn". Tất nhiên, trong trường hợp này, nó không bao giờ thực hiện như .hrefmọi khi bắt đầu với giao thức, thường là "http:" hoặc "file:". Mặc dù vậy, bạn LUÔN LUÔN sử dụng> -1,> = 0 hoặc, tùy chọn của tôi ,! == - 1 khi so sánh với kết quả của indexOf().
robinCTS

Tôi có một mảng giá trị và muốn xem liệu Url có bất kỳ giá trị nào không và đưa cho tôi chỉ số của mảng phù hợp với điều kiện. Làm thế nào để làm điều đó? Cảm ơn.
Si8

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

sẽ làm điều đó. Ngoài ra, bạn có thể sử dụng biểu thức chính quy:

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

4
Một ưu / nhược điểm giữa hai lựa chọn sẽ là một bổ sung tốt cho câu trả lời này.
Chris

Nhưng nếu tôi sử dụng biểu thức regex thì không ai có thể đọc được nó;)
RayLovless

26

Bạn sẽ sử dụng indexOfnhư thế này:

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

Cũng lưu ý việc thêm hrefchuỗi cho nếu không bạn sẽ làm:

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

23

như vậy

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

Sự khác biệt giữa cách gọi window.location.indexOf và window.location.href.indexOf là gì?
starplusplus

@starsplusplus Không có sự khác biệt. window.location.hreflà bí danh của window.location developer.mozilla.org/en-US/docs/Web/API/Window.location
Adrian Gonzales

Cái trên hoạt động tốt với tôi nhưng với hai biến làm thế nào để kiểm tra nó chứa cả hai giá trị
Vinoth Narayan

1
@VinothNarayan Bạn chỉ cần thêm một điều kiện vào ifcâu lệnh. Để đảm bảo nó có cả hai, bạn có thể sử dụng toán tử AND, có &&trong Javascript: if( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 ) Để kiểm tra xem nó có một hoặc giá trị khác hay không, hãy sử dụng toán tử OR, có hai ký tự ống|| if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
Adrian Gonzales

19

window.locationkhông phải là một Chuỗi, nhưng nó có một toString()phương thức. Vì vậy, bạn có thể làm điều đó như thế này:

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

hoặc là

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

Từ các tài liệu Mozilla cũ :

Các đối tượng vị trí có phương thức toString trả về URL hiện tại. Bạn cũng có thể gán một chuỗi cho window.location. Điều này có nghĩa là bạn có thể làm việc với window.location như thể đó là một chuỗi trong hầu hết các trường hợp. Đôi khi, ví dụ khi bạn cần gọi một phương thức String trên nó, bạn phải gọi một cách rõ ràng là toString.


2
Trong Firefox 48, String.prototype.contains () đã bị xóa. Chỉ sử dụng String.prototype.includes (). Xem tại đây
CaseyC

@CaseyC Thay đổi. Cảm ơn!
Alin Purcaru

9

Cách thức regex:

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

Hoặc trong một tuyên bố đơn giản bạn có thể sử dụng:

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

Tôi sử dụng điều này để kiểm tra xem trang web đang chạy cục bộ hay trên máy chủ:

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

Điều này kiểm tra xem href có chứa 192.168hoặc localhostAND được theo sau không :1337.

Như bạn có thể thấy, sử dụng regex có lợi thế của nó so với các giải pháp khác khi điều kiện trở nên phức tạp hơn một chút.


Đẹp. Tôi đã sử dụng if (window.parent.location.href.match (/ \? /)) {Window.parent.location = window.parent.location.pathname; } và nó hoạt động rất tốt ...
Tarik

Ngoài ra, tôi cảm thấy ngắn gọn hơn một chút để sử dụng if(/franky/.test(location.href)) { /* regex matched */ }nếu tôi không làm gì với các trận đấu.
cchamberlain

Vâng, testchắc chắn là sạch hơn matchtrong trường hợp này.
Stephan bijzitter

6

document.URLsẽ giúp bạn URL

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

6

Hãy thử cái này, nó ngắn hơn và hoạt động chính xác như window.location.href:

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

ngoài ra nếu bạn muốn kiểm tra URL trước đó:

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

@sixstarpro Tôi không làm downvote, nhưng, ồ tôi không biết, có lẽ rõ ràng là vì bạn đã đưa ra câu trả lời giống như bài này được đăng 18 tháng trước! Ngoài ra, thông tin thêm về document.referrerhoàn toàn không liên quan đến câu hỏi.
robinCTS

4

Dễ dàng hơn

<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

Thử cái này:

<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

Hãy thử indexOf

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

Bạn cũng có thể thử tìm kiếm (cho các biểu thức thông thường)

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

2

Sử dụng Window.location.href để lấy url trong javascript. đó là một tài sản sẽ cho bạn biết vị trí URL hiện tại của trình duyệt. Đặt thuộc tính thành một cái gì đó khác nhau sẽ chuyển hướng trang.

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

Cách kiểm tra nếu một url là trang mặc định và chuỗi iam kiểm tra không hiển thị. ví dụ như sample.com/homepage.aspx là trang của tôi và tôi đang tìm chuỗi 'trang chủ'. if (loc. Làm thế nào để kiểm tra kịch bản này là tốt? Xin vui lòng giúp đỡ!
Sweta

2

Tôi thích tạo một booleanvà sau đó sử dụng nó một cách hợp lý 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

Đặt trong tập tin js của bạn

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

Tôi không biết ~, vì vậy tôi đã tra cứu nó: " ~là một mẹo để biến indexOf()giá trị trả về được tìm thấy thành sự thật (trong khi không được tìm thấy là giả mạo). Mọi người thường sử dụng nó cho tác dụng phụ của việc cắt giảm số ..." - stackoverflow.com/a/12299678/3917091
Joe thường xuyên

1

Biểu thức chính quy sẽ tối ưu hơn cho nhiều người vì ranh giới từ \bhoặc các thiết bị tương tự. Lời ranh giới xảy ra khi nào 0-9, a-z, A-Z, _đang trên mà bên trong những trận đấu tiếp theo, hoặc khi một nhân vật tự chữ và số kết nối với dòng hoặc cuối chuỗi hoặc bắt đầu.

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

Nếu bạn sử dụng if(window.location.href.indexOf("sam"), bạn sẽ nhận được các trận đấu cho flotsamsame, trong số các từ khác. tomsẽ phù hợp với cà chua và ngày mai, không có regex.

Làm cho nó phân biệt chữ hoa chữ thường đơn giản như loại bỏ i.

Hơn nữa, việc thêm các bộ lọc khác cũng dễ như

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

Hãy nói về (?:\b|_). RegEx thường định nghĩa _word charactervì vậy nó không gây ra ranh giới từ. Chúng tôi sử dụng điều này (?:\b|_)để đối phó với điều này. Để xem nếu nó tìm thấy \bhoặc _ở hai bên của chuỗi.

Các ngôn ngữ khác có thể cần phải sử dụng một cái gì đó như

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.

Tất cả điều này dễ hơn là nói

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

Hương vị của các ngôn ngữ thông thường khác hỗ trợ Biểu thức chính quy \p{L}nhưng javascript thì không, điều này sẽ giúp cho việc phát hiện các ký tự nước ngoài dễ dàng hơn nhiều. Cái gì đó như[^\p{L}](filters|in|any|alphabet)[^\p{L}]


Mặt trái duy nhất của các biểu thức thông thường là chúng "chỉ viết" (nghĩa là không thể đọc);)
RayLovless

@RayLovless Vâng, trong các ngôn ngữ không có (?#comments)# commentstự do như javascript. Tuy nhiên, cái này không khó đọc. // Khi tôi sử dụng một regex phức tạp trong javascript, tôi giữ một bản sao nhận xét rằng tôi có thể chỉnh sửa lol.
Joe thường xuyên

0

Giả sử bạn có kịch bản này

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

Và dạng url là www.localhost.com/web_form_response.html?text_input=stack&over=flow

Các văn bản được viết <p id="response">sẽ làstack


0

Sẽ là một cách thực hành tốt nếu bạn chuyển đổi chuỗi của mình thành chữ thường hoặc chữ hoa vì phương thức indexof () phân biệt chữ hoa chữ thường. Điều này sẽ xảy ra nếu tìm kiếm của bạn không phải là trường hợp nhạy cảm với tâm trí đầy đủ. Vì vậy, đối với một tìm kiếm không phải là trường hợp nhạy cảm, nó sẽ là:

var string= location.href;
var convertedString= string.toLowerCase();
 if(convertedString.indexOf(franky) != -1){
  alert("url has franky");
}
else{
 alert("url has no franky");
 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.