我一直在研究将用户输入转换为可读形式的电话号码的代码。当用户输入电话号码时,我不会擦洗任何东西,但我会尝试在输出时将其擦洗回屏幕。下面是我正在使用的辅助函数。有没有人看到这个没有抓住的案例?
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
- 对于所有其他字符长度,只需输出它
- 接下来,如果部件数组有第二部分,则追加 ext 和其余部分
听起来对吗?我应该抓到吗?还是其他特殊字符?