密码验证的正则表达式,仅限特定字符

20 浏览
0 Comments

密码验证的正则表达式,仅限特定字符

这个问题已经有了答案

密码正则表达式必须包含至少八个字符,至少一个数字,大写字母,小写字母和特殊字符

我正在尝试创建一个密码验证的正则表达式。以下是要求。

  1. 最小长度为8。
  2. 至少有一个大写字母。
  3. 至少有一个小写字母。
  4. 至少有一个数字。
  5. 允许使用的字符为!@#$%^&*?_~()-,0个或更多个。
  6. 允许使用a-z。
  7. 允许使用A-Z。
  8. 允许使用0-9。

这是我迄今为止的表达式:

^.*(?=.{8,})(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[!@#$%^&*?_~()-]*).*$

这个表达式大部分都是有效的,除了我需要它只允许5-9这些项目。现在它将允许未指定的字符,例如 +=

如何修改这个表达式,只允许第5-9个项目,不允许其他字符?

admin 更改状态以发布 2023年5月24日
0
0 Comments

你可以将RegExp分成离散部分,添加或删除所需部分,使用Array.prototype.every(),在函数中包含&&!/[+=]/.test(str),以及输入字符串的 .length 属性。

var matches = [/[A-Z]/, /[a-z]/, /\d/, /[!@#$%^&*?_~()-]/];
var str = "Ab0!#?~_";
var pw = matches.every(function(re) {
  return re.test(str) && !/[+=]/.test(str)
}) && str.length === 8;
console.log(pw);

0
0 Comments

对于第一条和第五到第八条条件,您不需要使用前瞻检查-您可以在最终匹配中检查所有内容,例如

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\w!@#$%^&*?~()-]{8,}$

针对条件2-4,您可以使用前瞻检查。对于实际匹配,我们需要至少8个您允许的字符。我使用了\w来代替a-zA-Z0-9_,以使事情变得简短。

您可以在此处看到它的工作方式。

站点注释:密码限制字符通常被视为一个坏主意。同时xkcd对密码有一些看法。

0