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

niwlg2el  于 2023-05-22  发布在  jQuery
关注(0)|答案(6)|浏览(372)

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

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

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

yeotifhr

yeotifhr1#

在一次更换中:

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

当然,假设你总是有一个完美的字符串(没有空格,连字符或其他字符,10个字符…)
一个更严格的regexp可能是这样的:

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

但这仍然不能涵盖所有的可能性。

wooyq4lh

wooyq4lh2#

再切一次:

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,直到字符串的末尾。

9rygscc1

9rygscc13#

另一种解决方案:

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

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

b1uwtaje4#

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

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

并且如果用户输入空格来开始,则这将不会爆炸。

pkwftd7m

pkwftd7m5#

您必须考虑只有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`;
};
llycmphe

llycmphe6#

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

相关问题