JS隐藏部分号码

作者: 乘着风 | 来源:发表于2015-11-11 17:04 被阅读1800次

    银行卡,身份证,手机号码等等都需要隐藏部分号码来起到保护作用。
    以下是用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方法,这个方法的第一个参数可以是字符串或正则表达式,这里采用的是正则表达式来确定需要替换的字符。


    图片来自于网络

    拓展:

    • 注释的部分代码是测试用例,可以直接在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));
      • Dunizb:一般都是隐藏手机号码的中间4位数,你这只能隐藏开头几位和末尾几位啊?
        乘着风:@iBing 当时是个国外项目的需求是隐藏后四位,国内的手机号码确实通常隐藏中间四位,随后修改下。

      本文标题:JS隐藏部分号码

      本文链接:https://www.haomeiwen.com/subject/vzehhttx.html