/**
* 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));