Я хочу сделать автоинкрементируемую алфавитно-цифровой и это только для выводаавтоинкрементного буквенно-цифровая PHP, JavaScript
если я нажимаю кнопку, есть выход AA001, а затем я нажмите кнопку еще раз там представляет собой выход AA002
Я хочу сделать автоинкрементируемую алфавитно-цифровой и это только для выводаавтоинкрементного буквенно-цифровая PHP, JavaScript
если я нажимаю кнопку, есть выход AA001, а затем я нажмите кнопку еще раз там представляет собой выход AA002
Следующий код будет генерировать токен, который вы можете продвинуть одним. Он использует некоторые небольшие классы, чтобы сделать его модульным. Функция, которую вы прикрепляете к кнопке, вызывается следующей функцией на токене, как показано в самом низу.
//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());
}
const getNextAlphaString = function (str) {
"use strict";
str=str.toUpperCase();
let chars;
chars = str.split("");
const strLen = str.length;
let continueIncermenting = true;
for (let i = strLen - 1; i >= 0; i = i - 1) {
let asciiVal;
asciiVal = chars[i].charCodeAt(0);
if (isNaN(asciiVal)) {
return str;
}
if (continueIncermenting === true) {
if (asciiVal >= 48 && asciiVal < 57) {
chars[i] = String.fromCharCode(asciiVal + 1);
continueIncermenting = false;
break;
} else if (asciiVal == 57) {
chars[i] = '0';
continueIncermenting = true;
}
if (asciiVal >= 65 && asciiVal < 90) {
chars[i] = String.fromCharCode(asciiVal + 1);
continueIncermenting = false;
break;
} else if (asciiVal == 90) {
chars[i] = String.fromCharCode(65);
continueIncermenting = true;
}
} else {
if (asciiVal == 90) {
continueIncermenting = true;
chars[i] = String.fromCharCode(65);
}
if (asciiVal == 57) {
continueIncermenting = true;
chars[i] = '0';
}
}
}
if (continueIncermenting === true) {
let firstAcii = chars[0].charCodeAt(0);
if (isNaN(firstAcii)) {
return str;
}
if ((firstAcii >= 65 && firstAcii <= 90) || (firstAcii >= 97 && firstAcii <= 122)) {
return 'A' + chars.join('').toUpperCase();
}
if (firstAcii >= 48 && firstAcii <= 57) {
return '0' + chars.join('').toUpperCase();
}
}
return chars.join('').toUpperCase();
};
Результаты будут следующими:
ab1zde ---> AB1ZDF
abcdzz ---> ABCEAA
ZZZZZ ---> аааааа
abcyzz ---> ABCZAA
9000 ---> 9001
Это не использует никаких «умных» трюков, но короче и легче понять и настроить. Он также использует числа, чтобы он не увеличивал длину строки так же быстро. Он увеличивается от 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);
}
Результаты будут выглядеть следующим образом:
г - -> а0
9z ---> а0 (неожиданный вход)
ab1zde ---> ab1zdf
abcdzz ---> abce00
ZZZZZ ---> a00000
abcyzz ---> abcz00
9000 ---> 9001 (неожиданный ввод)
https://jsfiddle.net/e20kfvky/
График сколько переменных (т.е. начинаются с буквы алфавита):
1: 26, 2: 936, 3: 33696, 4: 1213056 ... n: 36^n - 10 * 36^(n - 1)
Как вы это делаете? –
как вы получаете свое первое значение при нажатии кнопки? –
Вы забыли задать нам вопрос или показать нам какой-либо код ваших текущих усилий. Кроме того, вы не объяснили, где находится ваш текущий код, или * как * он терпит неудачу. Хотели бы вы, чтобы мы помогали с вашей проблемой или просто поощряли вас каким-то образом? –