我只想屏蔽字符串中的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。
答案 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个数字,则该部分也将匹配。然后,用#####
您可能要做的是省略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);