JavaScript Проверка диапазона IP-адресов - второй IP больше первого IP-адреса - PullRequest
0 голосов
/ 30 марта 2020

Здравствуйте, я javascript noob и писал валидатор для диапазона IP-адресов. Например, 1.1.1.1-2.2.2.2 является допустимым диапазоном, однако я хочу убедиться, что первый IP не больше второго IP. 2.2.2.2-1.1.1.1 должен вернуть false. Какова лучшая стратегия для go в этой проблеме, должен ли я попытаться преобразовать каждую строку IP в карту целых чисел, а затем сравнить их одну за другой? Должен ли я выполнить итерацию для l oop 1-4 и сравнить первое значение перед. а потом второй эт c.

ipRangeValidator: function(value)
{
    if (!value)
        return true;
    var split = value.split('-');
    if (!split || split.length > 2 || split.length === 0) {
        return 'Input only an IP or single IP Range';
    }

    var ips = [];
    for (var x = 0; x < split.length; ++x) {
        var ip = split[x];
        if (isValidIpV6Address(ip)) { 
        } else if (isValidIpV4Address(ip)) {
        } else {
            return ip + ' is not a valid IP address';
        }
        ips.push(ip);
    }
    if (ips.length > 1) {
       if(true) {            //The Line I am struggling with
           return 'The first IP is greater than the second IP';
       }
    }
    return true;
}

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Будет ли что-то подобное для вас работать?

const validRange = '1.1.1.1-2.2.2.2',
      invalidRange = '2.2.2.2-1.1.1.1',
      anotherInvalidRange = '1.1.3.1-1.1.2.1',
      invalidIp = '1.1.300.1-1.1.1.1',
      
      isRangeValid = range => {
        const [rangeStart, rangeEnd] = range.split('-'),
              [s1,s2,s3,s4] = rangeStart.split('.'),
              [e1,e2,e3,e4] = rangeEnd.split('.')
        return [s1,s2,s3,s4].some(o => o>255 || o<0) || [e1,e2,e3,e4].some(o => o>255 || o<0) ?
          'range contains invalid IP' :
          s1>e1 || s2>e2 || s3>e3 || s4>e4 ?
          'range start is greater than range end' :
          'range is valid'
      }
      
console.log(isRangeValid(validRange))
console.log(isRangeValid(invalidRange))
console.log(isRangeValid(anotherInvalidRange))
console.log(isRangeValid(invalidIp))
.as-console-wrapper{min-height:100%;}
0 голосов
/ 30 марта 2020

Помогает ли это?

const pad = (num) => String("00"+num).slice(-3);
const ipRange = rng => {
  let [ip1,ip2] = rng.split("-");
  ip1 = ip1.split(".").map(num => pad(num)).join('.')
  ip2 = ip2.split(".").map(num => pad(num)).join('.')
  return ip1>ip2;
};
console.log(
  ipRange("1.1.1.1-2.2.2.2")
)  
console.log(
  ipRange("2.2.2.2-1.1.1.1")
)  
...