首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RegEx用于密码验证,只有特定字符

RegEx用于密码验证,只有特定字符
EN

Stack Overflow用户
提问于 2016-06-25 13:52:34
回答 2查看 1.2K关注 0票数 1

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

  1. 最小长度8。
  2. 至少有一个大写。
  3. 至少有一个较低的情况。
  4. 至少有一个号码。
  5. 这些字符中的0或更多!@#$%^&*_~()-允许。
  6. 是允许的。
  7. A-Z允许。
  8. 0-9允许。

以下是我到目前为止的表达方式:

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

这个表达式主要起作用,除了我需要它只允许5-9子弹。现在,它将允许未指定的字符,例如+=

如何修改这个表达式,使其只允许符号5-9,而不允许其他字符?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-25 14:00:51

您不需要前瞻性检查--检查第一和第五到第八条件--您可以在最后一场比赛中检查这一切,就像

代码语言:javascript
运行
复制
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\w!@#$%^&*?~()-]{8,}$

使用您的前瞻性检查条件2-4。对于实际的匹配,我们需要至少8个字符的允许字符。我使用了\w整数的a-zA-Z0-9_来保持更短的时间。

你可以看到它在工作,这里

网站注意:限制密码中的字符通常被认为是个坏主意。此外,xkcd对密码也有一些看法。

票数 2
EN

Stack Overflow用户

发布于 2016-06-25 14:11:18

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

代码语言:javascript
运行
复制
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);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38029249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档