0

在我的项目中,用户需要为每个记录副本键入唯一编号,这种唯一编号格式将被预定义(我们有单独的选项来设置格式,例如:如果格式为“CCNNN”表示 2 个字符和 3 个数字,即它可能看起来像' AA001 ' 一直持续到 ' AA999 ',这种类型的格式将为记录的每个部分设置,甚至格式可能看起来像这样 ' CCCCNNNNNNNN...N ' 这取决于。)。

这个唯一编号可能包含 4 个前缀字符,后缀将是数字,可能它可能会从 3 位数字变为“N”个数字(例如:“TSS0000000001234”)

听到我需要做的是,在输入第一条记录后,我将从数据库中获取该值并将该值加一,然后我将其保留在输入字段中(对于预定义的格式应该不会受到伤害),即在输入下一条记录之前,例如减少用户的努力(假设用户在提交记录输入字段后输入像'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”时它会失败,即使我可以保持另一个条件并增加它,但这不是一个更好的逻辑

任何帮助都会被挪用。谢谢。

4

2 回答 2

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”。

于 2013-09-10T09:21:18.993 回答
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; }

  }
}
于 2013-09-10T08:10:56.530 回答