如何检查URL是否包含给定的字符串?


361

我该怎么做:

<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"
基因b。

Answers:


656

您需要添加href属性并检查indexOf而不是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
我有一个很长的网址,例如Preview.tbwabox.co.nz/_v005/index.html#buying-a-car,我想检查字符串是否有“ buying-a-car但脚本”不起作用?
Vennsoh 2015年

6
@Vennsoh你无法找到“购买来的汽车”,因为你需要看window.location.hash没有window.location.href。只需在OP的函数中交换这些值即可。
阿德里安·冈萨雷斯

1
@JW为什么> -1不能使用> 0?
Elshan

5
@Elshan因为严格来说,如果以“ franky”开头,则.href.indexOf("franky") 可以返回0值.href。当然,在这种情况下,它永远不会像.href通常以“ http:”或“ file:”开头的协议那样总是如此。尽管如此,与的结果进行比较时,您始终应使用> -1,> = 0或我的首选项!==-1 indexOf()
robinCTS

我有一个值数组,想看看Url是否有任何值,并给我匹配条件的数组的索引。我怎么做?谢谢。
SI 8

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

会做到的。另外,您可以使用regexp:

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

4
两个选项之间的优缺点将是此答案的一个不错的补充。
克里斯,

但是,如果我使用正则表达式,那么任何人都无法阅读它;)
RayLoveless

26

您将这样使用indexOf

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

还请注意href为字符串添加了,否则您将执行以下操作:

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

23

像这样:

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

调用window.location.indexOf和window.location.href.indexOf有什么区别?
starplusplus 2014年

@starsplusplus没有任何区别。window.location.hrefwindow.location developer.mozilla.org/zh-CN/docs/Web/API/Window.location
Adrian Gonzales 2014年

上面的一个对我来说很好用,但是对于两个变量,如何检查它是否包含两个值
Vinoth Narayan

1
@VinothNarayan您可以简单地在if语句中添加另一个条件。要确保两者都存在,可以使用&&Java脚本中的AND运算符: if( window.location.href.indexOf("cart") > -1 && window.location.href.indexOf("box") > -1 ) 要检查它是否具有一个或另一个值,请使用OR运算符(两个管道字符)|| if( window.location.href.indexOf("cart") > -1 || window.location.href.indexOf("box") > -1 )
Adrian Gonzales

19

window.location不是字符串,但是有一个toString()方法。因此,您可以这样做:

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

要么

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

旧的Mozilla文档中

位置对象具有toString方法,该方法返回当前URL。您还可以将一个字符串分配给window.location。这意味着您在大多数情况下都可以像对待字符串一样使用window.location。有时,例如,当您需要在其上调用String方法时,必须显式调用toString。


2
在Firefox 48中,String.prototype.contains()已被删除。仅使用String.prototype.includes()。在这里看到
CaseyC '17

@CaseyC已更改。谢谢!
Alin Purcaru '17

9

正则表达式的方式:

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

或者在简单的语句中,您可以使用:

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

我用它来测试网站是在本地运行还是在服务器上运行:

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

这将检查href是否包含192.168localhostAND,然后是:1337

如您所见,当条件变得更加棘手时,使用正则表达式比其他解决方案具有优势。


真好 我用过if(window.parent.location.href.match(/ \?/)){window.parent.location = window.parent.location.pathname; },而且效果很好...
Tarik 2015年

另外,if(/franky/.test(location.href)) { /* regex matched */ }如果我对比赛不做任何事情,使用起来会更简洁。
cchamberlain

是的,test绝对比match这种情况干净。
斯蒂芬·比耶吉特

6

document.URL应该让你的URL

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

6

试试这个,它更短,并且可以像下面这样工作window.location.href

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

另外,如果您想检查以前的URL:

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

@sixstarpro我没有做downvote,但是,哦,我不知道,也许很明显,因为你给了相同的答案这一个贴18个月以前!另外,有关的额外信息document.referrer与问题完全无关。
robinCTS

4

更容易得到

<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

尝试这个:

<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

试试indexOf

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

您也可以尝试搜索(用于正则表达式)

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

2

使用Window.location.href在javascript中获取网址。该属性将告诉您浏览器的当前URL位置。将属性设置为其他内容将重定向页面。

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

如何检查url是否为默认页面和字符串iam检查不可见。例如sample.com/homepage.aspx是我的页面,而iam正在寻找字符串“ homepage”。if((loc.toString()。toUpperCase()。indexOf('homepage')> -1)){}可以正常工作,但是当Iam在sample.com上(仍然指向homepage.aspx)时,上述代码将无法工作。如何检查这种情况?请帮忙!
斯威塔

2

我喜欢创建一个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

放入您的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');
                }

我不知道~,所以我了一下:“这~是一种将indexOf()找到的返回值转换为真实值的技巧(同时使未找到的返回值变得虚假)。否则,人们会将其用于截断数字的副作用……” - stackoverflow.com/a/12299678/3917091
定期乔

1

由于单词边界\b或类似的设备,正则表达式对于很多人来说将是最佳的。当任何的发生字边界0-9a-zA-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通常定义_为a,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}]


正则表达式的唯一
缺点

@RayLoveless是的,支持无JavaScript (?#comments)和Freespacing等语言# comments。但是,这并不难读。//当我在JavaScript中使用复杂的正则表达式时,我保留了一个注释的副本,可以编辑大声笑。
定期乔

0

假设您有这个脚本

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

网址格式是 www.localhost.com/web_form_response.html?text_input=stack&over=flow

写入的文字<p id="response">将是stack


0

如果将字符串转换为小写或大写,这是一个好习惯,因为indexof()方法区分大小写。这将是如果您的搜索不区分大小写,那么对于不区分大小写的搜索,它将是:

var string= location.href;
var convertedString= string.toLowerCase();
 if(convertedString.indexOf(franky) != -1){
  alert("url has franky");
}
else{
 alert("url has no franky");
 }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.