我想制作一个自动增量字母数字,这仅用于输出
如果按下按钮,则输出AA001,然后再次按下按钮,输出AA002
答案 0 :(得分:1)
这并没有使用任何聪明的'技巧,但更短,更容易理解和调整。它也使用数字,因此它不会快速增长字符串的长度。它从0-9增加到a-z,但是你应该输入' a'首先。输出始终以字母字符开头,只要您的输入也以字母字符开头,因此它可以用作PHP变量名称
var nextVarName = function(str) {
// Position of char to change.
var change = str.length - 1;
// The value of that char.
var change_char = str[change];
// Number of zeros to append when flipping.
var zeros = 0;
// Iterate backwards while there's a z (flipping).
while (change_char == 'z') {
// Increase the length of appended zeros
zeros++;
// Move the char to change back.
change_char = str[--change];
}
if (change_char == undefined) {
// Full flip - string increases in length.
str = 'a' + Array(str.length + 1).join("0");
} else {
// Normal increment with partial flip and 9->a handling.
str = str.substr(0, change)
+ (change_char == '9' ? 'a' : String.fromCharCode(str.charCodeAt(change) + 1))
+ Array(zeros + 1).join('0');
}
return str;
};
var vname = 'a';
for (var i = 0; i < 5; i++) {
vname = nextVarName(vname);
console.log(vname);
}
结果如下:
z ---&gt; A0
9z ---&gt; a0(意外输入)
ab1zde ---&gt; ab1zdf
abcdzz ---&gt; abce00
zzzzz ---&gt; A00000
abcyzz ---&gt; abcz00
9000 ---&gt; 9001(意外输入)
https://jsfiddle.net/e20kfvky/
为每个长度创建了多少变量(以字母char开头)的计划如下:
1:26,2:936,3:33696,4:1213056 ... n:36 ^ n - 10 * 36 ^ (n - 1)
答案 1 :(得分:0)
以下代码将生成一个可以前进的令牌。它使用一些小类来使其模块化。您附加到按钮的功能将调用令牌旁边的功能,如最下方所示。
//Element in a big token
function Increment(startval, endval) {
this.start = startval.charCodeAt(0);
this.cur = this.start;
this.end = endval.charCodeAt(0);
//Returns the current value
this.get = function() {
if (this.cur <= this.end) {
return String.fromCharCode(this.cur);
} else {
return null;
}
}
//Advances the value we will show
this.next = function() {
this.cur += 1;
return this.get();
}
//Reset it to the beginning
this.reset = function() {
this.cur = this.start;
}
}
function Token() {
this.token = [
new Increment("A", "Z"),
new Increment("A", "Z"),
new Increment("0", "9"),
new Increment("0", "9"),
new Increment("0", "9")
];
this.get = function() {
return this.token.map(function(cur) {
return cur.get();
}).join("");
}
this.next = function() {
//From the back to the front
for (var i = this.token.length - 1; i >= 0; i--) {
if (this.token[i].next() == null) {
//If we exhausted all possible values, continue
this.token[i].reset();
} else {
//Until we advance one that has still values left
break;
}
}
return this.get();
}
}
//Now we are just showing off...
var a = new Token();
for (var i = 0; i < 15; i++) {
console.log(a.next());
}
&#13;
答案 2 :(得分:0)
DateField
结果如下:
ab1zde ---&gt; AB1ZDF
abcdzz ---&gt; ABCEAA
zzzzz ---&gt; AAAAAA
abcyzz ---&gt; ABCZAA
9000 ---&gt; 9001