3

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

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() 来检查一个字符串是否是字符串的一部分,如果为假,它会返回 -1。但我将如何通过整个阵列检查它?

Ps - 它用于 Chrome 扩展程序。

谢谢

4

4 回答 4

5

这是一个想法:

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

另一种是在连接数组上使用正则表达式:

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

这也将匹配 f.ex example_1.comyoyoyo

于 2013-03-26T13:53:46.203 回答
1
if (validStates.indexOf("example_1.com") > -1) {
  // Then it's inside your array
} 
else {
  // Then it's not inside your array
}
于 2013-03-26T13:53:07.303 回答
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;
}
于 2013-03-26T13:58:12.423 回答
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 } 
于 2013-03-26T14:04:08.490 回答