银行卡,身份证,手机号码等等都需要隐藏部分号码来起到保护作用。
以下是用javascript来制作的一个转换字符串的函数(replaceChars),可以用自定义的字符(mask)来替换相应位数(length)的号码,也可以利用参数(fromBegin)来使其“从头”或者“从尾”隐藏。
var replaceChars = function(str,length,fromBegin,mask){
mask = mask ? mask : '*';
var replacement = '';
for(var i=0; i<length; i++){
replacement += mask;
}
if(fromBegin){
var regexp = new RegExp('.{1,' + length + '}');
return str.replace(regexp, replacement);
} else {
var regexp = new RegExp('.{' + (str.length - length) + ',' + str.length + '}');
return str.substring(0,(str.length - length)) + str.replace(regexp, replacement);
}
}
//clear();
//var str = '123456789';
//console.log(replaceChars(str,5,false,'*'));
此函数的核心是利用原生JS中字符串的replace方法,这个方法的第一个参数可以是字符串或正则表达式,这里采用的是正则表达式来确定需要替换的字符。
![](https://img.haomeiwen.com/i218192/8d176f321af76721.png)
拓展:
- 注释的部分代码是测试用例,可以直接在firebug之类的控制台测试。
- 此函数也可以加入String的原型链中,便于使用。
- 此函数的参数初始化和顺序有待进一步优化。
</br></br></br>
参考文章:55分钟学正则,w3cshool - replace(),隐藏手机号
</br>
网友评论
var phone_num = "13022221111"
function mask(str, start, length, mask_char) {
return str.replace(str.substr(start, length), Array(length + 1).join(mask_char || "*"));
}
console.log(mask(phone_num, 3, 4));