首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用正则表达式验证给定密码时不包含字母、数字和特殊字符

使用正则表达式验证给定密码时不包含字母、数字和特殊字符
EN

Stack Overflow用户
提问于 2019-10-19 00:25:25
回答 3查看 64关注 0票数 1

我尝试在JavaScript中使用正则表达式来验证给定的密码是否包含字母、数字和特殊字符。然而,我试过的所有东西都不起作用

我试过使用

代码语言:javascript
运行
复制
/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@"#%$&])[A-Za-z0-9!@"#%$&]{8,30}$/gm

并为字母、数字和特殊字符创建单独的正则表达式变量:

代码语言:javascript
运行
复制
let alpha = /^[A-Za-z]+$/i
let numer = /^[0-9]+$/i
let special = /^[!@#$%^&*(),.?;":{}|<>']/i

Picture of My Code

当我将password.match(正则表达式)登录到控制台时,我总是看到null

EN

回答 3

Stack Overflow用户

发布于 2019-10-19 00:29:23

试试这个:

代码语言:javascript
运行
复制
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{8,15}$

这是很久以前的一篇文章。可能还有其他的。简单地搜索SO就能找到更多的例子。1

下面是正则表达式的可视化:

Debuggex Demo

票数 0
EN

Stack Overflow用户

发布于 2019-10-19 00:51:44

我个人倾向于使用单独的正则表达式,您当前的正则表达式的问题是在开始时使用^,在结束时使用$。这意味着密码从头到尾必须只包含[A-Za-z]。然后检查密码是否从头到尾只包含[0-9]

代码语言:javascript
运行
复制
const regexes = {
  alpha:   /[A-Za-z]/,
  number:  /[0-9]/,
  special: /[!@#$%^&*(),.?;":{}|<>']/,
  length:  /^.{8,30}$/
};

["dgXHUYuDdp", "zMv4qQfZj3", "4JXyrsq!J0", "a5Z!"].forEach(password => {
  let valid = Object.values(regexes).every(regex => password.match(regex));

  console.log(
    "password: " + JSON.stringify(password) + "\n" +
    "valid: " + valid
  );
});

票数 0
EN

Stack Overflow用户

发布于 2019-10-19 01:17:15

虽然我怀疑可能会编写一个正则表达式来进行位置/序列独立匹配,但我一想到这一点就头疼。因此,即使我能想出一种方法来做这件事,我也不会实现它--代码必须是人类可读和可解析的。看一下您在这里介绍的内容,我想我比您更熟悉正则表达式-所以更有理由不这么做。

您的字母/数字/特殊正则表达式将仅包含字母、数字或特殊字符的字符串,而不是混合字符。如果您这样更改它们,那么您可以检查所有这三个元素是否匹配(并转义特殊正则表达式中的元字符):

代码语言:javascript
运行
复制
let alpha = /[A-Za-z]/i;
let numer = /[0-9]/;
let special = /[!@#$%\^&*(),\.?;":{}|<>\']/;
if (password.match(alpha) && password.match(numer) && password.match(speicial)) {
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58454802

复制
相关文章

相似问题

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