Как проверить, содержит ли URL-адрес заданную строку?


Как я мог сделать что-то вроде этого:

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

16 ответов:

вам нужно добавить свойство href и проверить indexOf вместо contains

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

сделал бы это. Кроме того, вы можете использовать регулярное выражение:

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

можно использовать indexOf такой:

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

Также обратите внимание на добавление href для строки, в противном случае вы могли бы сделать:

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

вот так:

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

регулярное выражение так:

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

или в простом заявлении вы могли бы использовать:

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

Я использую это, чтобы проверить, работает ли сайт локально или на сервере:

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

это проверяет, является ли href содержит 192.168 или localhost и :1337.

как вы можете видеть, использование regex имеет свои преимущества перед другими решениями, когда условие становится немного сложнее.

window.location это не строка, но у нее есть toString() метод. Так что вы можете сделать это так:

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

или

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

С старые документы Mozilla:

расположение объектов имеют toString метод, возвращающий текущий URL. Вы также можно назначить строку окно.местоположение. Это означает, что вы может работать с окном.место, как будто это были строки в большинстве случаев. Иногда, например, когда вам нужно к вызовите строковый метод на нем, вы нужно явно вызвать toString.

document.URL дам тебе URL и

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

попробуйте это, это короче и работает точно так же, как window.location.href:

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

также, если вы хотите проверить предыдущий URL:

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

попробуйте это:

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

попробуйте indexOf

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

вы также можете попробовать поиск (для регулярных выражений)

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

мне нравится создавать boolean и затем использовать это в логическом 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');
}

легче становится

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

Окне Использовать.местоположение.href, чтобы взять url-адрес в javascript. Это свойство, которое сообщит вам текущее местоположение URL браузера. Установка свойства на что-то другое перенаправит страницу.

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

поместите в свой 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');
                }

регулярные выражения будут более оптимальными для многих людей из-за границ слов \b или аналогичные устройства. Границы слов возникают, когда любой из 0-9,a-z,A-Z,_ на ту сторону следующего совпадения, или когда буквенно-цифровой символ соединяется с линией или строкой конца или начала.

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

если вы используете if(window.location.href.indexOf("sam"), вы получите матчей flotsam и same, между прочим. tom будет соответствовать помидор и завтра, без регулярных выражений.

сделать его чувствительным к регистру так же просто, как удалить i.

кроме того, добавление других фильтров так же просто, как

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

давайте поговорим о (?:\b|_). Регулярное выражение обычно определяет _ как word character так что это не вызывает границы слова. Мы используем это (?:\b|_) чтобы справиться с этим. Чтобы увидеть, если он найдет \b или _ по обе стороны от строки.

другие языки, возможно, потребуется использовать что-то как

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.

все это проще, чем сказать

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

другие языки' вкусы регулярных выражений поддержки \p{L} но javascript этого не делает, что значительно упрощает задачу обнаружения иностранных символов. Что-то вроде [^\p{L}](filters|in|any|alphabet)[^\p{L}]

Предположим, у вас есть этот скрипт

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

и форма url www.localhost.com/web_form_response.html?text_input=stack&over=flow

текст написан на <p id="response"> будет stack