Generate Positive Integer Regex

Run Settings
LanguageJavaScript
Language Version
Run Command
/** * 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));
Editor Settings
Theme
Key bindings
Full width
Lines