【发布时间】:2021-12-02 11:51:17
【问题描述】:
我想生成一个长度为 16 个字符的随机密码,包含数字、字母和特殊字符,但两个特殊字符不能相邻
我使用的特殊字符是~!@#$%^&*()_+-={}[]:;\?,.|\\
generateRandomPasswordSelection = function (length, chars) {
var mask = '';
if (chars.indexOf('a') > -1) mask += 'abcdefghijklmnopqrstuvwxyz';
if (chars.indexOf('A') > -1) mask += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
if (chars.indexOf('#') > -1) mask += '0123456789';
if (chars.indexOf('!') > -1) mask += '~!@#$%^&*()_+-={}[]:;\?,.|\\';
var result ='';
for(var i=1; i>=1;i++){
result = '';
for (var i = length; i > 0; --i) result += mask[Math.round(Math.random() * (mask.length - 1))];
if(result.match(new RegExp(/(?!.*[~!@#$%^&*()_+={}[\]:;\?,.|\\-]{2})[A-Za-z0-9]{1,16}$/))){
console.log(result,'---------------->', 'BREAk')
break;
}
}
}
generateRandomPasswordSelection(16,'aA#!');
以上是我尝试过的代码,但没有成功。如何实现?
【问题讨论】:
-
chars 变量应该是什么?这是否只是意味着这些字符中的任何一个都不应该彼此相邻?
-
@DovRine ~!@#$%^&*()_+-={}[]:;\?,.|\\ 这些字符不应相邻。跨度>
-
那么第二个变量是干什么用的?
-
我在 bash
head -c 100 </dev/urandom | base64 | head -c "${1:-64}"中使用它。这个想法是一个长的随机 base64 字符串足够安全。
标签: javascript regex regex-lookarounds