有些时候需生成的标签自增,
比如”rs-001,rs-002…”,或”00-001ace, 00-002ace…”,又或者”a-01-001,a-01-002”这种。包含字母,且结尾部分字符串需要递增。故编写了以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| function isRealNum(val) {
if (val === "" || val == null) { return false; } if (!isNaN(val)) { return true; } else { return false; } } var strInc = function (str) { if (str === undefined) return ''; var arr = str.split(""); var farr = new Array(); var tarr = new Array(); var numLen = 0; for (var i = 0; i < arr.length; i++) { tarr[i] = false; var tnum = parseInt(arr[i]) if (isRealNum(tnum)) farr[i] = true; else farr[i] = false; } var nStr = '' var hadEverTrue = false; for (var i = arr.length - 1; i >= 0; i--) { if (farr[i]) { hadEverTrue = true; nStr = arr[i] + nStr; tarr[i] = true; numLen++; } else { if (hadEverTrue) break; } } var srcNum = parseInt(nStr); var dstNum = srcNum + 1; var hadEverReplace = false; var dstStr = ''; for (var i = 0; i < arr.length; i++) { if (tarr[i]) { if (hadEverReplace === false) { var tmp = dstNum + ''; if (tmp.length < numLen) { var needFixed = numLen - tmp.length; for (var f = 0; f < needFixed; f++) { tmp = '0' + tmp; } } dstStr += tmp; hadEverReplace = true; } } else dstStr += arr[i]; } return dstStr; }
|
测试样例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| var str='6789021_99'; console.log("input: " + str); var dstStr=strInc(str); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr);
str='a0098'; dstStr=strInc(str); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr);
str='b-10-098'; dstStr=strInc(str); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr);
str='c-10-998'; dstStr=strInc(str); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr); dstStr=strInc(dstStr); console.log("output: "+dstStr);
|
Console:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| input: 6789021_99 output: 6789021_100 output: 6789021_101 output: 6789021_102 output: 6789021_103 output: 6789021_104 output: 6789021_105 output: 6789021_106 output: a0099 output: a0100 output: a0101 output: a0102 output: a0103 output: a0104 output: b-10-099 output: b-10-100 output: b-10-101 output: b-10-102 output: b-10-103 output: b-10-104 output: c-10-999 output: c-10-1000 output: c-10-1001 output: c-10-1002 output: c-10-1003 output: c-10-1004
|