Javascript - 检查字符串是否是数组中字符串的一部分

时间:2013-03-26 13:51:01

标签: javascript arrays google-chrome

我有一个列出几个网站的数组:

var validSites = new Array();
validSites[0] = "example_1.com";
validSites[1] = "example_2.com";
validSites[2] = "example_3.com";

现在我有一个小脚本来检查你所在的网址,并可以返回这样的内容:

example_1.com/something/something_else

现在我需要检查该地址是否是有效站点之一。 所以

example_1.com/*ANYTHING* 

将正确传递。 但

exampleshmample.com

会传递错误。

现在我知道你可以做一个indexOf(),它可以检查字符串是否是字符串的一部分,如果为false则返回-1。但我如何通过整个阵列检查它?

P.s - 用于Chrome扩展程序。

感谢

4 个答案:

答案 0 :(得分:5)

这是一个想法:

var str = 'example_1.com/something/something_else';
if( validSites.indexOf( str.split('/')[0] ) > -1 ) {
    // is valid
}

另一个是在连接数组上使用regexp:

var str = 'example_1.com/something/something_else';
new RegExp('^('+validSites.join('|')+')','i').test(str);

这也将匹配f.ex example_1.comyoyoyo

答案 1 :(得分:1)

if (validStates.indexOf("example_1.com") > -1) {
  // Then it's inside your array
} 
else {
  // Then it's not inside your array
}

答案 2 :(得分:0)

如果你可以从数组中切换,我会选择json表示法

var validSites = {
  "example_1.com":"valid",
  "example_2.com":true,
  "example_3.com":1 //you could even start putting paths in here to beef up your check.
};

// ..你的检查功能是: .....

if(validSites[window.location.hostname]){
  return true;
}else{
  return false;
}

答案 3 :(得分:0)

你可以通过循环和设置标志变量来实现这一点,试试这个,我没有测试过这个。 我直接输入了代码。我认为这可能会对你有所帮助

var flag =0;
var givenurl='example_1.com/*ANYTHING*';
for(int i=0 i<validSites.length;i++){
if(givenurl.indexOf(validSites[i])){
flag=1 //Found
}
}
if(flag) { //Url Found }else{ //not found }