ユーザー入力を読み取り可能な形式の電話番号に変換するコードに取り組んでいます。ユーザーが電話番号を入力したときに何もスクラブしていませんが、出力時に画面にスクラブしようとしています。以下は、私が使用しているヘルパー関数です。これがキャッチされないケースを見た人はいますか?
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);
};
コードの一般的な説明:
- 反転正規表現を使用して、0 ~ 9 と Xx 以外のすべての文字を削除します
- Xx に基づいて文字列を分割します
- 最初の部分を取得し、その長さに基づいて出力形式を計算します
- 12 および 13 文字の文字列 (国際的なものと想定) の場合、先頭に + を追加します。
- 11 文字の文字列の場合は、n (nnn) nnn-nnnn を使用します
- 10 文字の場合は (nnn) nnn-nnnn を使用します
- 7 文字の場合は nnn-nnnn を使用
- 他のすべての文字の長さについては、それを出力するだけです
- 次にparts配列に2番目のpartがあればextと残りを追加
そうですね?私はキャッチする必要があります; または他の特殊文字も?