3

我一直在研究将用户输入转换为可读形式的电话号码的代码。当用户输入电话号码时,我不会擦洗任何东西,但我会尝试在输出时将其擦洗回屏幕。下面是我正在使用的辅助函数。有没有人看到这个没有抓住的案例?

var formatPhone = function(raw){
  var parts = raw.replace(/[^0-9X]/gi, '').split('x');
  var result = parts[0];
  switch(result.length){
    case(13):
      result = result.replace(/(\d{3})(\d{3})(\d{3})(\d{4})/, '+$1 ($2) $3-$4');
      break;
    case(12):
      result = result.replace(/(\d{2})(\d{3})(\d{3})(\d{4})/, '+$1 ($2) $3-$4');
      break;
    case(11):
      result = result.replace(/(\d{1})(\d{3})(\d{3})(\d{4})/, '$1 ($2) $3-$4');
      break;
    case(10):
      result = result.replace(/(\d{3})(\d{3})(\d{4})/, '($1)v$2-$3');
      break;
    case(7):
      result = result.replace(/(\d{3})(\d{4})/, '$1-$2');
      break;
    default:
      result = result;
  }
  if(parts.length>1){
    result += ' ext ' + parts[1];
  }
  return new Handlebars.SafeString(result);
};

代码的一般解释:

  1. 使用倒置正则表达式去除除 0-9 和 Xx 之外的所有字符
  2. 根据 Xx 拆分字符串
  3. 取第一部分并根据其长度计算输出格式
    • 对于 12 和 13 个字符串(假定为国际),在前面加上 +
    • 对于 11 个字符串,使用 n (nnn) nnn-nnnn
    • 对于 10 个字符,使用 (nnn) nnn-nnnn
    • 对于 7 个字符,使用 nnn-nnnn
    • 对于所有其他字符长度,只需输出它
  4. 接下来,如果部件数组有第二部分,则追加 ext 和其余部分

听起来对吗?我应该抓到吗?还是其他特殊字符?

4

0 回答 0