我尝试在JavaScript中使用正则表达式来验证给定的密码是否包含字母、数字和特殊字符。然而,我试过的所有东西都不起作用
我试过使用
/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@"#%$&])[A-Za-z0-9!@"#%$&]{8,30}$/gm并为字母、数字和特殊字符创建单独的正则表达式变量:
let alpha = /^[A-Za-z]+$/i
let numer = /^[0-9]+$/i
let special = /^[!@#$%^&*(),.?;":{}|<>']/i当我将password.match(正则表达式)登录到控制台时,我总是看到null
发布于 2019-10-19 00:29:23
试试这个:
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[^\da-zA-Z]).{8,15}$这是很久以前的一篇文章。可能还有其他的。简单地搜索SO就能找到更多的例子。1
下面是正则表达式的可视化:

发布于 2019-10-19 00:51:44
我个人倾向于使用单独的正则表达式,您当前的正则表达式的问题是在开始时使用^,在结束时使用$。这意味着密码从头到尾必须只包含[A-Za-z]。然后检查密码是否从头到尾只包含[0-9]。
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
);
});
发布于 2019-10-19 01:17:15
虽然我怀疑可能会编写一个正则表达式来进行位置/序列独立匹配,但我一想到这一点就头疼。因此,即使我能想出一种方法来做这件事,我也不会实现它--代码必须是人类可读和可解析的。看一下您在这里介绍的内容,我想我比您更熟悉正则表达式-所以更有理由不这么做。
您的字母/数字/特殊正则表达式将仅包含字母、数字或特殊字符的字符串,而不是混合字符。如果您这样更改它们,那么您可以检查所有这三个元素是否匹配(并转义特殊正则表达式中的元字符):
let alpha = /[A-Za-z]/i;
let numer = /[0-9]/;
let special = /[!@#$%\^&*(),\.?;":{}|<>\']/;
if (password.match(alpha) && password.match(numer) && password.match(speicial)) {https://stackoverflow.com/questions/58454802
复制相似问题