拆分并在电话号码之间添加空格

我正在尝试将电话号码格式化为更简洁的格式,从前面添加第三个和第七个字符之间的空格。

var string = "02076861111" var phone = [string.slice(0, 3), " ", string.slice(3)].join(''); console.log(phone); // returns 020 76861111 

我在哪里放置第七个字符的方法,以便返回020 7686 1111

任何帮助表示赞赏。 提前致谢!

在一个替换:

 var string = "02076861111" var phone = string.replace(/(\d{3})(\d{4})(\d{4})/, '$1 $2 $3'); console.log(phone); 

当然,假设你总是有一个完美的字符串(没有空格,连字符或其他字符,10个字符…)

更严格的正则表达式可能是这样的:

 var phone = string.replace(/\D*(\d{3})\D*(\d{4})\D*(\d{4})\D*/, '$1 $2 $3'); 

但是,这仍然没有抓住每一种可能性。

再次切片:

 var phone = [string.slice(0, 3), " ", string.slice(3,7), " ", string.slice(7)].join(''); 

Slice采用开始和(独占)结束索引。 注意,如果缺少结束索引,它将占用字符串的其余部分。

因此第一个切片采用索引0到2,第二个切片采用索引3到6,最后一个切片采用索引7到字符串的结尾。

为什么使用切片,当正则表达式可以工作时

 "02076861111".replace(/(\d{3})\D?(\d{4})\D?(\d{4})/,"$1 $2 $3"); 

如果用户进入空间开始,这不会爆炸。

 "02076861111".replace(/^\d{3}-\d{8}$/); 

输出:020-76861111