Quick actions

cmd+k|ctrl+k

Navigation

Languages

Generate Positive Integer Regex

Snippet info

Language

JavaScript

Visibility

public

Author

pheker

Created

2018-09-28T16:24:02Z

Updated

2018-09-29T05:17:24Z



/**
 * Generate Positive Integer Regex that's not great than the Max Integer
 * 用给出的正整数生成一个正则 可匹配不大于此数的正整数
 **/
function genRegex(max,whole){
    var posNum = false;
    if(typeof(max) === "number" && max>0 
        || typeof(max)==="string" && /^\d+$/.test(max) && parseInt(max)>0){
        posNum = true;
    }
    if(!posNum){
        console.log(max+": it's not positive number!");
        return "";
    }
    
    //is legal number
    max = String(max);
    var len = max.length;
    var result = "";
    
    if(len == 1) return whole?"^(?:"+range(1,max)+")$":"\\b(?:"+range(1,max)+")\\b";
    
    //位数相同的情况
    var  one = "";
    for(var b=0;b<len; b++){
        var preffix = max.substring(0,b);
        var curr = parseInt(max.substring(b,b+1));
        if(b===0&&curr===1||b!==0&&b!==len-1&&curr===0) continue;//特殊情况
        //第一位和最后一位 要注意
        var center = b===0?range(1,curr-1):
            (b==len-1?range(0,curr):range(0,curr-1));
        var suffixdlen = len - b -1;
        var suffix = suffixdlen === 0?"":suffixdlen===1?"\\d":"\\d{"+suffixdlen+"}";
        one = preffix + center +suffix +"|" + one;
    }
    
    //位数较少的情况
    var bitLessOne = "[1-9]"+(len>3?"\\d{0,"+(len-2)+"}":len==3?"\\d?":"");
    return whole?"^(?:"+one + bitLessOne+")$":"\\b(?:"+one + bitLessOne+")\\b";

    function range(min,max){
        return max<=min?min:"["+min+"-"+max+"]";  
    }
}

//for test
console.log(genRegex("1000"));
console.log(genRegex(65535,true));
console.log(genRegex(1<<24));

INFO