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. 次にparts配列に2番目のpartがあればextと残りを追加

そうですね?私はキャッチする必要があります; または他の特殊文字も?

4

0 に答える 0