Отображение отформатированного номера телефона с регулярным выражением - PullRequest
0 голосов
/ 04 марта 2019

Я пишу канал на Angular, который отображает соответствующий форматированный номер телефона в зависимости от того, что содержится в строке.

Ввод: возможные строковые прецеденты, которые необходимо отобразить: +1 (123) 456-7891 (код страны + символ) (123) 456-7891 (десять цифр) (123) 456-7891 ext1234 (тендигитс расширением) + 1 (123) 456-7891 ext1234 (код страны, тендин, расширение)

Мой текущий код:

const rawPhoneNumber = '1(626) 423-3343 ex123'
const pattern = /(\d{1})?([a-zA-Z\d]{3})([a-zA-Z\d]{3})([a-zA-Z\d]{4})(.*)/
const matches = rawPhoneNumber.replace(/[\W_]*/g, '').match(pattern);
let arrOfDigits = matches.filter((item, index) => item != undefined);
arrOfDigits = arrOfDigits.filter((item, index) => item.length)

// simple Phone
if (arrOfDigits.length === 4) {
  console.log(`(${arrOfDigits[1]}) ${arrOfDigits[2]}-${arrOfDigits[3]}`)  
}
// prephonesuffix
if (arrOfDigits.length === 6) {
  console.log(`+${arrOfDigits[1]} (${arrOfDigits[2]}) ${arrOfDigits[3]}-${arrOfDigits[4]} ${arrOfDigits[5]}`)
}
// pre or suff
if (arrOfDigits.length === 5) { 
  if (arrOfDigits[1].length <= 2) {
    console.log(`${arrOfDigits[1]} (${arrOfDigits[2]}) ${arrOfDigits[3]}-${arrOfDigits[4]}`)
  } else {
    console.log(`(${arrOfDigits[1]}) ${arrOfDigits[2]}-${arrOfDigits[3]} ${arrOfDigits[4]}`)
  }
}

Моя проблема в том, что это очень легко сломать, еслиномер не идеален.Я хотел бы любые предложения относительно того, как я мог бы покрыть больше случаев.

Спасибо.

1 Ответ

0 голосов
/ 29 марта 2019

Я создал директиву для этой цели.

GitHub Gist

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...