【问题标题】:How to write a regular expression that will replace a password in a url string?如何编写将替换 url 字符串中的密码的正则表达式?
【发布时间】:2019-08-12 07:27:41
【问题描述】:

我知道将用户密码传递到网址中是不好的做法,我们将努力寻找更好的解决方案,但现在我需要这样做。

如何在 url 中用正则表达式替换密码?

密码可以在网址中问号后面的任何位置。

正则表达式需要处理这样的情况:

API?clientcode=abc&password=123&name=123

API?password=123&name=123

API?name=123&password=123

这是我尝试过的方法,但并未涵盖所有情况:

&?password=(.*)&?

'mystring'.replace(/password=(.*?)&/g, 'password=PLACEHOLDER');

我在这里试过这个: https://www.regextester.com/index.php?fam=108498

【问题讨论】:

    标签: javascript regex url passwords


    【解决方案1】:

    你可以使用这个正则表达式,

    \b([?&]?password=)[^&< ]*
    

    并替换为,

    $1PLACEHOLDER
    

    Online Demo

    JS代码演示,

    var arr = ['<html><a>password=abc<a></html>','API?clientcode=abc&password=123&name=123','API?password=123&name=123','API?name=123&password=123','password=JCuLnyAVeAJIjxLIPoyO3WNYyHtBgySrHsQg2MimIgxHDfbg3APuiSJHtPVY4lN&name=123'];
    
    for(s of arr) {
      console.log(s + " --> " + s.replace(/\b([?&]?password=)[^&< ]*/g, '$1PLACEHOLDER'));
    }

    【讨论】:

    • 它工作得很好,但它确实错过了这些情况:password=JCuLnyAVeAJIjxLIPoyO3WNYyHtBgySrHsQg2MimIgxHDfbg3APuiSJHtPVY4lN&name=123
    • @user1261710:根据您发布的示例,这种情况不存在。但这也很容易处理。如果 URL 部分可以为空,您可以交替使用 ^ 来代替 ? 和 &amp;,并且可以使用此正则表达式 ((?:^|[?&amp;])password=)[^&amp;]*。 Check this
    • 要不要也添加这个案例? 密码=abc
    • @user1261710:当然,你可以使用这个正则表达式([?&amp;]?\bpassword=)[^&amp;&lt; ]*。 Demo
    猜你喜欢
    • 2019-02-03
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2018-07-13
    • 2015-04-21
    相关资源
    最近更新 更多