Back to all solutions

#1694 - Reformat Phone Number

Problem Description

You are given a phone number as a string number. number consists of digits, spaces ' ', and/or dashes '-'.

You would like to reformat the phone number in a certain manner. Firstly, remove all spaces and dashes. Then, group the digits from left to right into blocks of length 3 until there are 4 or fewer digits. The final digits are then grouped as follows:

  • 2 digits: A single block of length 2.
  • 3 digits: A single block of length 3.
  • 4 digits: Two blocks of length 2 each.

The blocks are then joined by dashes. Notice that the reformatting process should never produce any blocks of length 1 and produce at most two blocks of length 2.

Return the phone number after formatting.

Solution

/**
 * @param {string} number
 * @return {string}
 */
var reformatNumber = function(number) {
  const digits = number.replace(/[^0-9]/g, '');
  const blocks = [];
  let i = 0;

  while (i < digits.length) {
    const remaining = digits.length - i;
    if (remaining > 4) {
      blocks.push(digits.slice(i, i + 3));
      i += 3;
    } else if (remaining === 4) {
      blocks.push(digits.slice(i, i + 2), digits.slice(i + 2));
      break;
    } else if (remaining === 2 || remaining === 3) {
      blocks.push(digits.slice(i));
      break;
    }
  }

  return blocks.join('-');
};