正则表达式掩盖连接字符串密码

时间:2016-01-19 02:56:37

标签: javascript regex

我的输入可以是以下格式的连接字符串:

Data Source=server;Initial Catalog=db;Uid=username;Pwd=password;
db;username;password;

我需要结果:

Data Source=server;Initial Catalog=db;Uid=username;Pwd=********;
db;username;********;

我知道密码。密码可以等于连接字符串中的另一个变量。我需要星号的数量来匹配密码中的字符数。

3 个答案:

答案 0 :(得分:0)

这样的事情应该有帮助

text = "Data Source=server;Initial Catalog=db;Uid=username;Pwd=password;db;username;password;";
"Data Source=server;Initial Catalog=db;Uid=username;Pwd=password;db;username;password;"
text.replace(/(Pwd=)(\w+)/,'$1********').replace(/(\w+);$/,'********')
"Data Source=server;Initial Catalog=db;Uid=username;Pwd=********;db;username;********"

您的评论的解决方案可能类似于

text.replace(/(Pwd=)(\w+);.+;(\w+);$/,function(m,m1,m2,m3){
  return "Pwd="+ '*'.repeat(m2.length)+";db;username;"+'*'.repeat(m3.length);
})

答案 1 :(得分:0)

您可以使用正则表达式替换字符串中的文本。我使掩码的长度与密码长度相同,这是可选的。

  • \b字障碍
  • pwd=完全匹配
  • ([^;]+)任何不是半冒号的东西。一个或多个(捕获响应)
  • gim修饰符,用于全局,不区分大小写,多行
  由于@Arthur2e5,s评论

更改了掩码功能

var source = "Data Source=server;Initial Catalog=db;Uid=username;Pwd=password;db;username;password;";
var cleaned = source.replace(/\bpwd=([^;]+)/gim, function(_, pass ){
  return 'Pwd=' + ('*'.repeat( pass.length ));
});
// one liner not much of a change
var es6oneLine = source.replace(/\bpwd=([^;]+)/gim, (_, pass) => 'Pwd=' + ('*'.repeat( pass.length )));
console.log( source );
console.log( cleaned );
console.log( es6oneLine );
<script src="http://codepen.io/synthet1c/pen/WrQapG.js"></script>

三个选项的性能测试。 String.prototype.repeat获胜。

console.perf(function testSpeedOfLoopingAndConcatination(){
  var str = "";
  for( var ii = 0, ll = 8; ii < ll; ii++ ){
    str += '*';
  };
});

console.perf(function testSpeedOfRegexReplace(){
    var str = 'something'.replace(/./g, '*');
});

console.perf(function testSpeedOfStringProtoRepeat(){
    var str = '*'.repeat( 8 );
});
<script src="http://codepen.io/synthet1c/pen/WrQapG.js"></script>

答案 2 :(得分:0)

如果您不担心分号和密码中的等号,可以这么简单:

s.replace(
  /[^;=]*;$/, 
  function(x) { return "*".repeat(x.length) + ';'; })