我正在尝试将电话号码的格式设置为更整洁的格式,即在从前面开始的每第三个和第七个字符之间添加一个空格。
var string = "02076861111" var phone = [string.slice(0, 3), " ", string.slice(3)].join(''); console.log(phone);
我应该把第七个字符的方法放在哪里,以便返回020 7686 1111?
020 7686 1111
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');
但这仍然不能涵盖所有的可能性。
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,直到字符串的末尾。
9rygscc13#
另一种解决方案:
function numberWithSpaces(value, pattern) { var i = 0, phone = value.toString(); return pattern.replace(/#/g, _ => phone[i++]); } console.log(numberWithSpaces('02076861111', '### #### ####'));
b1uwtaje4#
为什么要使用切片,当一个正则表达式可以工作
console.log( "02076861111".replace(/(\d{3})\D?(\d{4})\D?(\d{4})/,"$1 $2 $3") );
并且如果用户输入空格来开始,则这将不会爆炸。
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`; };
llycmphe6#
console.log( "02076861111".replace(/^\d{3}-\d{8}$/) );
6条答案
按热度按时间yeotifhr1#
在一次更换中:
当然,假设你总是有一个完美的字符串(没有空格,连字符或其他字符,10个字符…)
一个更严格的regexp可能是这样的:
但这仍然不能涵盖所有的可能性。
wooyq4lh2#
再切一次:
Slice有一个开始和(排他的)结束索引。注意,如果缺少结束索引,它将使用字符串的其余部分。
因此,第一个切片的索引为0到2,第二个切片的索引为3到6,最后一个切片的索引为7,直到字符串的末尾。
9rygscc13#
另一种解决方案:
b1uwtaje4#
为什么要使用切片,当一个正则表达式可以工作
并且如果用户输入空格来开始,则这将不会爆炸。
pkwftd7m5#
您必须考虑只有11、12和13个字符的数字才有效,您必须知道有效的电话号码由国家代码加上10位数字组成。因此,我想按国家代码格式化电话号码,然后是一些任意的组,如+1 555 555 5555、+22 555 555 555或+333 555 555 5555。
因此,我想要一个过滤数字并格式化它们的函数:
如果你想用一个函数来验证一个数字,它应该是这样的
llycmphe6#