当前位置: 代码迷 >> JavaScript >> 使用正则表达式渲染格式化的电话号码
  详细解决方案

使用正则表达式渲染格式化的电话号码

热度:31   发布时间:2023-06-06 09:34:19.0

我正在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]}`)
  }
}

我的问题是,如果数字不完美,这很容易打破。 我想就如何处理更多案件提出任何建议。

谢谢。

我为此创建了一个指令。