javascript检查元素是否包含数组的某些部分

时间:2016-09-01 07:05:38

标签: javascript arrays search

我有一个像这样的数组

var ALLOW_SUBNET = ['192.168.1.', '192.168.2.', '192.168.3.' , '192.168.4.'];

我可以使用自己的函数获取PC Client的IP地址:

getIPClient()
    var ipclient = input.getIPClient();

我的问题是如何检查客户端IP是否在我允许的子网内,我尝试使用indexOf()函数,但结果是错误的。 例如:

if IP Client is 192.168.1.115 => allow

if IP Client is 192.168.5.115 => deny.

4 个答案:

答案 0 :(得分:10)

您可以使用Array#some并检查ALLOW_SUBNET的一部分是否在位置ip的{​​{1}}内。



0




ES6与String#startsWith



function check(ip) {
    return ALLOW_SUBNET.some(function (a) { return !ip.indexOf(a); });
}

var ALLOW_SUBNET = ['192.168.1.', '192.168.2.', '192.168.3.', '192.168.4.'];

console.log(check('192.168.1.115'));
console.log(check('192.168.5.115'));




答案 1 :(得分:5)

这是一个解决方案。



var ALLOW_SUBNET = ['192.168.1.', '192.168.2.', '192.168.3.', '192.168.4.'];

function checkIP(ip) {
  var allow = false;
  for (var i = 0; i <= ALLOW_SUBNET.length; i++) {
    if (ip.indexOf(ALLOW_SUBNET[i]) > -1) {
      allow = true;
      break;
    }
  }
  return allow;
}

console.log(checkIP('192.168.9.3'));

console.log(checkIP('192.168.1.3'));
&#13;
&#13;
&#13;

答案 2 :(得分:3)

您可以尝试这样的事情:

逻辑:

  • 您有一个共同的部分192.168。你可以使用正则表达式。
  • 您的第3个区块可以1-4。您可以拥有允许值列表。这样,您就可以在希望添加6的情况下处理案例,同时仍然不允许5
  • 您可以拥有最后一个区块的范围值。

var ipRegex = /^192.168/
var ALLOW_SUBNET = [1, 2, 3, 4];
var ALLOW_ADDRESS = [95, 120]

var validIp = ["192.168.1.115", "192.168.2.96"];
var invalidIPs = ["192.167.1.115", "192.168.5.115", "192.168.1.90", "192.168.1.215"];

function validateIP(ip) {
  var parts = ip.split(".");
  return !(
    !ipRegex.test(ip) ||
    ALLOW_SUBNET.indexOf(+parts[2]) < 0 ||
    !(ALLOW_ADDRESS[0] <= +parts[3] && ALLOW_ADDRESS[1] >= +parts[3])
  )
}

validIp.forEach(function(ip) {
  console.log(ip, validateIP(ip));
})
invalidIPs.forEach(function(ip) {
  console.log(ip, validateIP(ip));
})

答案 3 :(得分:2)

这将完成工作:

allow_deny = function(ipclient) {
  var ALLOW_SUBNET = ['192.168.1.', '192.168.2.', '192.168.3.','192.168.4.'];
  var arr = ipclient.split('.');
  arr.pop();
  var testedip = arr.join('.') + '.';
  return ((ALLOW_SUBNET.indexOf(testedip) > -1) ? 'allow' : 'deny');
}

console.log(allow_deny('192.168.1.115'));
console.log(allow_deny('192.168.5.115'));

这将导致检查您的控制台:

> allow
> deny