我正在尝试将电话号码格式化为更简洁的格式,从前面添加第三个和第七个字符之间的空格。
var string = "02076861111"
var phone = [string.slice(0, 3), " ", string.slice(3)].join('');
console.log(phone);
// returns 020 76861111
我在哪里放置第七个字符的方法,以便返回020 7686 1111
?
感谢任何帮助。提前谢谢!
答案 0 :(得分:7)
单次替换:
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');
但是,这仍然无法抓住每一种可能性。
答案 1 :(得分:2)
再次切片:
var phone = [string.slice(0, 3), " ", string.slice(3,7), " ", string.slice(7)].join('');
Slice采用开始和(独占)结束索引。请注意,如果缺少结束索引,它将接受字符串的其余部分。
因此第一个切片采用索引0到2,第二个采用索引3到6,最后一个切片采用索引7到字符串的结尾。
答案 2 :(得分:1)
为什么在正则表达式可以使用时使用切片
"02076861111".replace(/(\d{3})\D?(\d{4})\D?(\d{4})/,"$1 $2 $3");
如果用户进入空间开始,这将不会爆炸。
答案 3 :(得分:0)
"02076861111".replace(/^\d{3}-\d{8}$/);
输出:020-76861111
答案 4 :(得分:0)
替代解决方案:
function numberWithSpaces(value, pattern) {
var i = 0,
phone = value.toString();
return pattern.replace(/#/g, _ => phone[i++]);
}
console.log(numberWithSpaces('02076861111', '### #### ####'));