Как проверить, содержит ли 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 ответов:
вам нужно добавить свойство 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")
расположение объектов имеют 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