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

Split and Add Space Between Phone Number

本文关键字:空间 之间 电话号码 添加 拆分      更新时间:2023-09-26

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

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

我在哪里放置第七个字符的方法以便返回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 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到字符串的末尾。

另一种解决方案:

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

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

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

,如果用户输入空格开始,这个将不会爆炸

您必须考虑只有11、12和13个字符的号码是有效的,您必须知道一个有效的电话号码由国家代码加上10位数字组成。因此,我想按国家代码格式化电话号码,然后是一些任意组,如+1 555 555 5555,+22 555 555 555,或+333 555 555 5555 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`;
};

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