仅屏蔽9位数字

时间:2018-07-12 18:07:41

标签: javascript regex

我只想屏蔽字符串中的9位数字。如果字符串包含的数字少于9或大于9,则不应屏蔽该数字。

我的代码:

var str = 'My Business phone number is 1234567890 and my personal number is 123456789';
    
var rgx1 = /\d{9}/;
    
var find1 = rgx1.test(str);
    
if(find1){
     var str1 = str.replace(/\d{5}/, '#####');
     console.log(str1);
}

结果:我的公司电话号码是1234567890,我的个人电话号码是##### 6789

但是,如果该代码具有9位以上的数字,并且字符串包含9位和10位数字,则该代码将返回true。

2 个答案:

答案 0 :(得分:1)

您可以在一个正则表达式中执行此操作,以捕获9个数字,并用换行符将其括起来:

const test = "nine digits: 123456789 and ten digits 0123456789"
console.log(test.replace(/\b\d{5}(\d{4})\b/, '#####$1'))

正则表达式将查找:一个分词符,后跟5位数字,然后是4位数字,然后是一个分词符。最后四位数字被捕获,因此$1在替换中可以被引用

这是首选的解决方案,因为您不必担心任何边缘情况,例如您的字符串的一部分与外部正则表达式匹配,而字符串的另一部分与内部正则表达式匹配。

答案 1 :(得分:0)

在您的代码中,如果字符串包含9个连续的数字,则test部分将匹配;如果有10个数字,则该部分也将匹配。然后,用#####

替换第一次出现的5位数字(即1234567890)。

您可能要做的是省略var find1 = rgx1.test(str);部分,并使用\b\d{9}\b,后者使用单词边界\b来确保它不是更长匹配的一部分。

您可以将replace与回调函数一起使用。在回调函数中,将前5位替换为#####。要替换所有匹配项而不是仅替换所有匹配项,您可以添加/g修饰符。

var str = 'My Business phone number is 1234567890 and my personal number is 123456789';
var str1 = str.replace(/\b\d{9}\b/g, function(match) {
  return match.replace(/\d{5}/, '#####');
});
console.log(str1);