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

问题描述 投票:0回答:6

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

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

我应该把第七个字符的方法放在哪里,以便返回

020 7686 1111

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

javascript jquery
6个回答
17
投票

在单个替换中:

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');

但是,这并不能抓住所有的可能性。


4
投票

再切一遍:

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

console.log(phone);

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

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


3
投票

替代解决方案:

function numberWithSpaces(value, pattern) {
  var i = 0,
    phone = value.toString();
  return pattern.replace(/#/g, _ => phone[i++]);
}

console.log(numberWithSpaces('02076861111', '### #### ####'));


2
投票

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

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

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


1
投票

您必须考虑只有 11、12 和 13 个字符的号码才有效,您必须知道一个有效的电话号码由国家代码和 10 位数字组成。因此我想按国家代码格式化电话号码,然后是一些任意组,比如 +1 555 555 5555、+22 555 555 555 或 +333 555 555 5555。

因此我想要一个过滤数字并格式化它们的函数:

export const formatPhone = (phone: string) => {
  const myPhone = phone.match(/(\d)/g)?.join(``);
  if (myPhone === undefined) return ``;
  if (myPhone?.length === 11) {
    return myPhone.replace(/(\d{1})(\d{3})(\d{3})(\d{4})/, `+$1 $2 $3 $4`);
  }
  if (myPhone?.length === 12) {
    return myPhone.replace(/(\d{2})(\d{3})(\d{3})(\d{4})/, `+$1 $2 $3 $4`);
  }
  if (myPhone?.length === 13) {
    return myPhone.replace(/(\d{3})(\d{3})(\d{3})(\d{4})/, `+$1 $2 $3 $4`);
  }
    
  return myPhone;
};

如果你想要一个函数来验证一个数字,它会是这样的

export const validatePhone = (myPhone: string) => {
  if (myPhone === ``) return ``;

  const phone = myPhone.match(/(\d)/g)?.join(``);

  if (phone === undefined) return `only numbers are valid`;

  if (phone?.length > 13 || phone?.length < 11)
    return `${phone} is not a valid number`;
};

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.