Javascript 用于自定义密码要求的正则表达式

Javascript 用于自定义密码要求的正则表达式,javascript,regex,passwords,salesforce,Javascript,Regex,Passwords,Salesforce,我正试图根据密码要求创建一个正则表达式 至少八(8)个字符 至少一个数字(0-9) 以下任意三项: 小写的 大写字母 数 特殊字符(!“#$%&'()*+,-./:;?@[\]^{124;}~) 我创建了这个正则表达式 /^[0-9a-zA-Z\s!"#$\%&'\(\)\*\+\,\-\.\/\:;<=>?@\[\\\]\^\_\`\{\|\}\~]+$/g /^[0-9a-zA-Z\s!”\$\%&“\(\)\*\+\,\-\.\/\:;?@[\\\]\\\\\

我正试图根据密码要求创建一个正则表达式

  • 至少八(8)个字符
  • 至少一个数字(0-9)
  • 以下任意三项:
    • 小写的
    • 大写字母
  • 特殊字符(!“#$%&'()*+,-./:;<=>?@[\]^{124;}~)
我创建了这个正则表达式

/^[0-9a-zA-Z\s!"#$\%&'\(\)\*\+\,\-\.\/\:;<=>?@\[\\\]\^\_\`\{\|\}\~]+$/g
/^[0-9a-zA-Z\s!”\$\%&“\(\)\*\+\,\-\.\/\:;?@[\\\]\\\\\\\\\\\\\\\\\\]+$/g
我对正则表达式没有太多的了解,所以只需要确认它是正确的正则表达式还是需要更改。

这个怎么样:

^(?=.{8,})(?=.*?\d)(?=.*[\s!\"#$\%&'\(\)\*\+\,\-\.\/\:;<=>?@\[\\\]\^\_\`\{\|\}\~])(?=[a-zA-Z0-9].*?[a-zA-Z0-9].*?[a-zA-Z0-9].*?).*$
(?=.{8,})(?=.*.\d)(?=.[\s!\“\$\%&'\(\)\*\+\,\-\.\/\:;?@[\\]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]](?=[a-zA-Z0-9*$
如图所示

说明: 我用了很多正面的表情,你可以阅读更多

基本上,向前看可以确保某个位置前面有一些字符。在检查密码的开头是否符合您的所有条件后,我们将匹配密码。
这样想:您确保所有内容都是正确的,如果是,则匹配密码。否则,您将不匹配

(?=.{8,})
检查是否至少有8个字符
(?=.*?\d)
检查是否至少有一个数字
^(?=.{8,})(?=.*.\d)(?=.[\s!\“\$\%&'\(\)\*\+\,\-\.\/\:;?@[\\]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]])
检查是否至少有3个字母和/或数字

如何:

^(?=.{8,})(?=.*?\d)(?=.*[\s!\"#$\%&'\(\)\*\+\,\-\.\/\:;<=>?@\[\\\]\^\_\`\{\|\}\~])(?=[a-zA-Z0-9].*?[a-zA-Z0-9].*?[a-zA-Z0-9].*?).*$
(?=.{8,})(?=.*.\d)(?=.[\s!\“\$\%&'\(\)\*\+\,\-\.\/\:;?@[\\]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]](?=[a-zA-Z0-9*$
如图所示

说明: 我用了很多正面的表情,你可以阅读更多

基本上,向前看可以确保某个位置前面有一些字符。在检查密码的开头是否符合您的所有条件后,我们将匹配密码。
这样想:您确保所有内容都是正确的,如果是,则匹配密码。否则,您将不匹配

(?=.{8,})
检查是否至少有8个字符
(?=.*?\d)
检查是否至少有一个数字
^(?=.{8,})(?=..*.\d)(?=.[\s!\“\$\%&'\(\)\*\+\,\-\.\/\:;?@[\\\]\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]])
检查是否至少有3个字母和/或数字

您可以尝试一下

^(?=.*\d)[ !"#$%&'()*+,.\/:;<=>?@[\]^`{|}~\w-]{8,}$
^(?=.*\d)[!“$%&'()*+,.\/:;?@[\]^`{124;}~\ w-]{8,}$


代码示例

const regex=/^(?=.*\d)[!“$%&'()*+,.\/:;?@[\]^`{124;}~\ w-]{8,}$/gm;
常量str=`1234
adnc
123456789
abcdefghij
ABCDEFGHIJ
1ABCDEFG
123-ANCNA
`;
让m;
while((m=regex.exec(str))!==null){
//这是避免具有零宽度匹配的无限循环所必需的
if(m.index==regex.lastIndex){
regex.lastIndex++;
}
//可以通过'm`-变量访问结果。
m、 forEach((匹配,组索引)=>{
log(`Found match,group${groupIndex}:${match}`);
});
}
您可以试试这个

^(?=.*\d)[ !"#$%&'()*+,.\/:;<=>?@[\]^`{|}~\w-]{8,}$
^(?=.*\d)[!“$%&'()*+,.\/:;?@[\]^`{124;}~\ w-]{8,}$


代码示例

const regex=/^(?=.*\d)[!“$%&'()*+,.\/:;?@[\]^`{124;}~\ w-]{8,}$/gm;
常量str=`1234
adnc
123456789
abcdefghij
ABCDEFGHIJ
1ABCDEFG
123-ANCNA
`;
让m;
while((m=regex.exec(str))!==null){
//这是避免具有零宽度匹配的无限循环所必需的
if(m.index==regex.lastIndex){
regex.lastIndex++;
}
//可以通过'm`-变量访问结果。
m、 forEach((匹配,组索引)=>{
log(`Found match,group${groupIndex}:${match}`);
});

}
如果我没有看错的话,您的正则表达式是
^[long list of alternative]+$
。那么,在这种情况下,它也将匹配
hello
。复杂的密码规则通常不会导致更安全的密码,重要的是只有最小长度。人们无法记住大量的强密码,这样的规则可能会干扰良好的密码方案。人们可以很有创意地绕过这些规则,例如使用“Password-2020”之类的弱密码。通常情况下,您的密码会变弱,而不是变强。NIST发布了一份反对此类规则及其以前建议的建议。如果我没有读错的话,您的正则表达式是
^[备选方案长列表]+$
。那么,在这种情况下,它也将匹配
hello
。复杂的密码规则通常不会导致更安全的密码,重要的是只有最小长度。人们无法记住大量的强密码,这样的规则可能会干扰良好的密码方案。人们可以很有创意地绕过这些规则,例如使用“Password-2020”之类的弱密码。通常情况下,您的密码会变弱,而不是变强。NIST发布了一份反对此类规则及其先前建议的建议。