Как проверить, содержит ли URL заданную строку? - PullRequest
323 голосов
/ 04 января 2011

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

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

3 голосов
/ 04 января 2011

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

<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> 
2 голосов
/ 01 августа 2016

Мне нравится создавать 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');
}
1 голос
/ 03 ноября 2017

Регулярные выражения будут более оптимальными для многих людей из-за границ слов \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|_).RegEx обычно определяет _ как 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}]

1 голос
/ 18 сентября 2017

Поместите в свой файл 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');
                }
1 голос
/ 01 июня 2015

Используйте Window.location.href, чтобы получить URL-адрес в JavaScript.это свойство, которое сообщит вам текущее местоположение URL браузера.Установка свойства в другое значение приведет к перенаправлению страницы.

if (window.location.href.indexOf('franky') > -1) {
     alert("your url contains the name franky");
}
0 голосов
/ 25 января 2017

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

<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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...