Skip to content

javascript ranges calculate library / JavaScript区间计算库

Notifications You must be signed in to change notification settings

cyrilluce/Ranges.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JavaScript区间计算库 JavaScript ranges calculate library

Build Status Test Coverage

用法/Usage

可参照test/test.js中的测试代码

Refer to test code in test/test.js

示例/Sample

标准用法/Standard usage

var Ranges = require('range-calculator');
var ranges = new Ranges(1,10);
ranges.add([21, 30]); // ranges.ranges = [ [1,10], [21,30] ]
ranges.isConflict([11, 20]); // false
ranges.isConflict([25, 45]); // true
ranges.add([11, 20]); // ranges.ranges = [ [1,30] ]
ranges.sub([1,5]); // ranges.ranges = [ [6,30] ]
ranges.sub([15,25]); // ranges.ranges = [ [6,14], [26,30] ]
ranges.isContain(12); // true

用于IPv4冲突判断/Use as IPv4 conflict detect

var ipToNumber = function(dot){
    var d = dot.split('.');
    return ((((((+d[0])*256)+(+d[1]))*256)+(+d[2]))*256)+(+d[3]);
};
var ranges = new Ranges(ipToNumber('192.168.1.100'), ipToNumber('192.168.1.199'));
ranges.isConflict([ipToNumber('192.168.0.1'), ipToNumber('192.168.2.1')]); // true
ranges.isContain(ipToNumber('192.168.1.125')); // true

用于IPv6冲突判断(字串对比)Use as IPv6 conflict detect(string range)

// [JS] Expand Abbreviated IPv6 Addresses
// by Christopher Miller
// http://forrst.com/posts/JS_Expand_Abbreviated_IPv6_Addresses-1OR
// Modified to work with embedded IPv4 addresses
// https://gist.github.com/Mottie/7018157
function expand(address)
{
    var fullAddress = "";
    var expandedAddress = "";
    var validGroupCount = 8;
    var validGroupSize = 4;
    if(address.indexOf("::") == -1) // All eight groups are present.
        fullAddress = address;
    else // Consecutive groups of zeroes have been collapsed with "::".
    {
        var sides = address.split("::");
        var groupsPresent = 0;
        for(var i=0; i<sides.length; i++)
        {
            groupsPresent += sides[i].split(":").length;
        }
        fullAddress += sides[0] + ":";
        for(var i=0; i<validGroupCount-groupsPresent; i++)
        {
            fullAddress += "0000:";
        }
        fullAddress += sides[1];
    }
    var groups = fullAddress.split(":");
    for(var i=0; i<validGroupCount; i++)
    {
        while(groups[i].length < validGroupSize)
        {
            groups[i] = "0" + groups[i];
        }
        expandedAddress += (i!=validGroupCount-1) ? groups[i] + ":" : groups[i];
    }
    return expandedAddress;
}

var ranges = new Ranges(expand('fe80::1:fdd7:b312:1'), expand('fe80::bc5e:fdd7:b312:cd02'));
ranges.isConflict([expand('fe80::1'), expand('fe80::1de6:fa0a:892d:bf77')]); // true
ranges.isContain(expand('fe80::1de6:fa0a:892d:bf77')); // true

其它曾使用到的场景 Also used to solves these problems

使用html高亮搜索关键词 use html to highlight keywords

this is testest word

this is testest word

this is testest word

License

MIT

About

javascript ranges calculate library / JavaScript区间计算库

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages