在我的项目中,用户需要为每个记录副本键入唯一的编号,这个唯一的数字格式将被预定义(我们有单独的选项来设置格式,例如:如果格式为'CCNNN'表示2个字符和3个数字,即它可能看起来像'AA001'并且它一直持续到'AA999',这种格式将为每个记录部分设置,甚至格式可能看起来像'CCCCNNNNNNNNNNN'它取决于它。)。
这个唯一的数字可能包含4个前缀字符,后缀将是数字,可能从3位数到“N”数字可能会疲惫不堪(例如:'TSS0000000001234')
听到我需要做的是,在输入第一条记录之后,我将从数据库中获取该值并将该值递增1,并且我会将其保留在输入字段中(对于预定义格式不应该受到影响),即在输入下一条记录之前,类似于减少用户工作量(假设用户在提交记录输入字段后输入的类似'TS001'将准备好下一个条目'TS002'的唯一编号,就像我保持增量的每种格式的唯一编号一样明智。)
我试过这种方式(我认为我使用了完全错误的逻辑)http://jsfiddle.net/hatwar/5bk6E/ ...
var givenInput="TS0001";//input different format eg: MAM7612 or HSD8723
// hear prefix possibly character and sufix probably integer
var separation = givenInput.substring(2); //
var gettingLastNo = separation[separation.length-1];
var incrementedValue = gettingLastNo.replace(/(\d+)/, function(){return arguments[1]*1+1});
var conditionCheck = '1';
if(incrementedValue.length > conditionCheck){
document.write((givenInput.substring(0, givenInput.length-2))+incrementedValue);
}else{
document.write((givenInput.substring(0, givenInput.length-1))+incrementedValue);
}
如果用户输入'TS1,TS2,TS3 ......这样的唯一号码,我没有问题。我可以很容易地增加但它可能包含'零'这就是为什么我尝试上面但是当用户输入像'TS199'时失败即使我可以保持另一个条件并增加它但它不是一个更好的逻辑
任何帮助都将被挪用。谢谢。
答案 0 :(得分:1)
请尝试使用这个简单的代码。 这会在你解释时给你一个结果。
var givenInput = "TSBC020145";
var myNumber = givenInput.match(/\d+/g)[0];
var myString = givenInput.match(/\D+/g)[0];
var myIncrement = ++givenInput.match(/\d+/g)[0];
var myFinalNumber = myString + myNumber.substr(0, (myNumber.length - myIncrement.toString().length))+myIncrement;
'myFinalNumber'具有您想要的结果值。结果将是'TSBC020146'。
答案 1 :(得分:0)
由于您已经从数字中拆分了前缀,因此您可以使用parseInt将字符串转换为整数:
var incrementedValue = parseInt(gettingLastNo) + 1;
如果您不提前知道模式,可以使用正则表达式来分割输入
var matched = givenInput.match(/^([^\d]+)(\d+)$/);
if (matched === null) {
//process invalid input
} else {
if (matched.length != 3) {
//also invalid input
} else {
var prefix = matched[1];
var inputNoLen = matched[2].length;
var lastNo = parseInt(matched[2]);
var nextNo = lastNo + 1;
var ouputNo = "" + nextNo;
if (outputNo.length < inputNoLen) { outputNo = Array(inputNoLen - outputNo.length + 1).join("0") + outputNo; }
}
}