Javascript 用于密码验证的正则表达式,仅限特定字符
我正在尝试创建一个用于密码验证的正则表达式。以下是要求Javascript 用于密码验证的正则表达式,仅限特定字符,javascript,regex,Javascript,Regex,我正在尝试创建一个用于密码验证的正则表达式。以下是要求 最小长度8 至少1个大写字母 至少1个小写字母 至少1个数字 这些字符中有0个或多个!@#$%^&*_~()-允许 a-z允许 A-Z允许 允许0-9 以下是我迄今为止的表达: ^.*(?=.{8,})(?=.[a-z])(?=.[a-z])(?=..[a-z])(?=.\d)(?=.[!@#$%^&*?!()-]*)。$ 这个表达式主要起作用,除了我需要它只允许5-9个项目符号。现在它将允许未指定的字符,例如+= 如何修改此表达式以仅允许
^.*(?=.{8,})(?=.[a-z])(?=.[a-z])(?=..[a-z])(?=.\d)(?=.[!@#$%^&*?!()-]*)。$
这个表达式主要起作用,除了我需要它只允许5-9个项目符号。现在它将允许未指定的字符,例如+=
如何修改此表达式以仅允许项目符号5-9,而不允许使用其他字符?对于第一个和第五个至第五个条件,您不需要进行前瞻性检查-您可以在最终匹配中检查所有这些,如
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[\w!@#$%^&*?~()-]{8,}$
使用前瞻检查条件2-4。对于实际匹配,我们需要至少8个字符的允许字符。我使用了\w
intead ofa-zA-Z0-9
来缩短时间
你可以看到它在工作
站点提示:限制密码中的字符通常被视为一个坏主意。还有一些关于密码的内容。您可以将
RegExp
分解为离散的部分,添加或删除所需的部分,使用数组.prototype.each()
,包括&&/函数内的[+=]/.test(str)
,以及输入字符串的长度
属性
var matches=[/[A-Z]/,/[A-Z]/,/\d/,/[!@$%^&*?~()-]/];
var str=“Ab0!#?~";
var pw=匹配的.every(函数(re){
返回重新测试(str)和&!/[+=]/.test(str)
})&&str.length==8;
控制台日志(pw)代码>为什么要限制密码中的字符?更重要的是,为什么其他字符对您的密码存储是一个问题?为什么不对这些字符使用单独的检查?不确定“允许5-9和没有其他字符”是什么意思?@PeeHaa后端已经这样设计了。@melpomene说到regex,我是一个noob。我愿意接受任何建议。