以下功能可将电话号码(例如+33286487648)转换为+332 ****** 48。
formatPhoneWithStar = function(phone) {
const prefixLength = 4;
const suffixLength = 3;
const prefix = phone.substring(0, prefixLength);
const suffix = phone.slice(-suffixLength);
const nbStars = phone.length - (prefixLength + suffixLength);
let formattedPhone = prefix;
for (let i = 0; i < nbStars; i++) {
formattedPhone += '*';
}
formattedPhone += suffix;
return formattedPhone;
}
但是,我想避免使用forloop(nodeJS目的)。我想知道是否可以使用正则表达式完成相同的功能?
我已经尝试了一些像
这样的人([0-9]{3})([0-9]{4})([0-9]{3})\w+
然后我想使用$ 1和$ 3,例如$ 1 + [如何生成明星] + $ 3。有没有人知道如果不使用for循环和使用正则表达式这是否可行?
感谢您的帮助。
答案 0 :(得分:2)
此处无需使用正则表达式,只需使用"*".repeat(nbStars)
:
phone ="+33286487648";
prefixLength = 4;
suffixLength = 3;
prefix = phone.substring(0, prefixLength);
suffix = phone.slice(-suffixLength);
nbStars = phone.length - (prefixLength + suffixLength);
formattedPhone = prefix + "*".repeat(nbStars) + suffix;
console.log(formattedPhone);
&#13;
答案 1 :(得分:2)
您可以传递replacement function:
'+33286487648'.replace(/^(\+?\d{3})(\d+)(\d{2})$/, function() {
return arguments[1] + arguments[2].replace(/./g, '*') + arguments[3];
}); // Produces '+332******48'
或许眼睛看起来更容易一点(灵感来自其他答案的.repeat
):
function hideMiddle(string, prefixLength, suffixLength) {
var re = new RegExp('^(\\+?\\d{' + prefixLength + '})(\\d+)(\\d{' + suffixLength + '})$');
return string.replace(re, function(match, prefix, middle, suffix) {
return prefix + '*'.repeat(middle.length) + suffix;
});
}
console.log(hideMiddle('+33286487648', 3, 2));
console.log(hideMiddle('+33286487648', 1, 1));
&#13;
答案 2 :(得分:0)
使用正则表达式+替换:
var phone = "+33286487648";
var m = phone.match(/(\+\d{3})(\d+)(\d{3})/);
var res = m[1] + '*'.repeat(m[2].length) + m[3];
console.log(res);
&#13;