[Vuejs]-Increment digit part of string in JavaScript

-2๐Ÿ‘

โœ…

I solve this with this solution

let app = new Vue({
  el: '#app',
  data: {
    text: "AA995"
  },
  methods: {
    addOneString: function(str) {
      var alphabet = 'abcdefghijklmnopqrstuvwxyz',
            length = alphabet.length,
            result = str,
            i = str.length,
          value = str;

        while(i >= 0) {
            var last = str.charAt(--i),
                next = '',
                carry = false;

            if (isNaN(last)) {
                index = alphabet.indexOf(last.toLowerCase());

                if (index === -1) {
                    next = last;
                    carry = true;
                }
                else {
                    var isUpperCase = last === last.toUpperCase();
                    next = alphabet.charAt((index + 1) % length);
                    if (isUpperCase) {
                        next = next.toUpperCase();
                    }

                    carry = index + 1 >= length;
                    if (carry && i === 0) {
                        var added = isUpperCase ? 'A' : 'a';
                        result = added + next + result.slice(1);
                        break;
                    }
                }
            }
            else {
                next = +last + 1;
                if(next > 9) {
                    next = 0;
                    carry = true;
                }

                if (carry && i === 0) {
                    result = '1' + next + result.slice(1);
                    break;
                }
            }

            result = result.slice(0, i) + next + result.slice(i + 1);
            if (!carry) {
                break;
            }
        }
      
      console.log("result",result);
      if (value !== result ) this.text = result;
    
    }
  }  
})
<script src="https://unpkg.com/vue/dist/vue.js"></script>

<div class="container" id="app">
    
  <button @click="addOneString(text)">Add one</button>
  
  </br>
  <p> {{text}} </p>
</div>
๐Ÿ‘คHasibul-

1๐Ÿ‘

You can split char and digit parts so you can handle them separately.

like:

function increaseStringValue(str){
    let charPart = str.substring(0,2);
    let digitPart = str.substring(2);
    digitPart = +digitPart+1
    if(digitPart >= 99999){
        digitPart = 11111;
        if(charPart[1] == 'Z'){
            if(charPart[0] == 'Z'){
                throw 'Overflow happened'
            }
            charPart = String.fromCharCode(charPart.charCodeAt(0)+1) + 'A'
        }else{
            charPart = charPart[0] + String.fromCharCode(charPart.charCodeAt(1)+1)
        }
    }

    return charPart + digitPart;
}
increaseStringValue('AA11111'); // 'AA11112'
increaseStringValue('AA99999'); // 'AB11111'
increaseStringValue('AZ99999'); // 'BA11111'
increaseStringValue('ZZ99999'); // Exception: Overflow happened

This links will be helpful for you:

ASCII CODES

what is a method that can be used to increment letters?

Edit:

Following function will be suite for unknown length string with dynamic position of char and digit.

function increaseStringValue(str) {
    let charOverFlowed = true;
    let result = ""
    for (let i = str.length - 1; i >= 0; i--) {
        let currentChar = str[i];
        if ('123456789'.indexOf(currentChar) !== -1) {
            if (charOverFlowed) {
                currentChar = +currentChar + 1
                charOverFlowed = false;
            }
            if (currentChar > 9) {
                currentChar = 1;
                charOverFlowed = true;
            }
        } else if (charOverFlowed) {
            currentChar = String.fromCharCode(currentChar.charCodeAt(0) + 1)
            charOverFlowed = false;
            if (currentChar > 'Z') {
                if(i == 0){
                    throw 'Overflow Happened'
                }
                currentChar = 'A'
                charOverFlowed = true
            }
        }
        result = currentChar + result;
    }
    return result;
}
increaseStringValue('AAAACA')
// "AAAACB"
increaseStringValue('AAAACA1111')
// "AAAACA1112"
increaseStringValue('A1')
// "A2"
increaseStringValue('Z')
// Uncaught Overflow Happened
increaseStringValue('A1999')
// "A2111"

1๐Ÿ‘

 function increaseStringValue(myString){
      return myString.replace(/\d+/ig, function(a){ return a*1+1;});
 }
console.log(increaseStringValue("asg61"));

And for next question:

function increaseStringValue(myString){ 
    return myString.replace(/(A)(\d+)/ig, function(a, b, c){
         var r = c*1+1; return r==99999+1?"B11111":"A"+r;
    });
 }
console.log(increaseStringValue("AA99999"));

And Whole way:

function increaseStringValue(myString){ 
    return myString.replace(/([a-e])(\d+)/ig, function(a, b, c){
         var r = c*1+1; return r==99999+1?String.fromCharCode(a.charCodeAt(0)+1)+"11111":b+r;
    });
 }
console.log(increaseStringValue("AB99999"));
๐Ÿ‘คHassan Sadeghi

0๐Ÿ‘

Please find the snippet useful. If this is what you are expecting.

let stringNum = 'AA11111';//initialise string
let clickTriggered = ()=>{

let startString = "AA";
let newNum = ()=>{
  let numberPart = stringNum.split("AA")[1];
  let lastChar = stringNum[stringNum.length-1];
  return Number(numberPart) != NaN || Number(numberPart) <= 99999 ? Number(numberPart)+1 : 11111;
};

stringNum = `${startString}${newNum()}`
console.log(stringNum)

}
<h1 onclick="clickTriggered()">click here</h1>
๐Ÿ‘คkarthik

0๐Ÿ‘

You can use String#replace and provide your increment logic in the function callback of the string#replace.

const increaseStringValue = (str) => str.replace(/\d+$/, n => n === '99999' ? 11111 : +n + 1);

console.log(increaseStringValue('AA99999'));
console.log(increaseStringValue('AA11315'));
console.log(increaseStringValue('AA11111'));
๐Ÿ‘คHassan Imam

Leave a comment