Javascript 如何为长度为8-24且至少包含以下3项的密码验证创建正则表达式:小写、大写、数字、特殊字符
我想使用java脚本验证以下密码标准 a、 密码至少为8个字符,不超过24个字符 b、 每个密码必须至少包含以下四种类型的字符中的三种: 1.大写字母 2.小写字母 3.数字 4.一个特殊的角色 我发现这段代码非常简单,而且是完整的,但它只是检查了所有4个条件,而不是4个条件中的至少3个Javascript 如何为长度为8-24且至少包含以下3项的密码验证创建正则表达式:小写、大写、数字、特殊字符,javascript,regex,validation,passwords,Javascript,Regex,Validation,Passwords,我想使用java脚本验证以下密码标准 a、 密码至少为8个字符,不超过24个字符 b、 每个密码必须至少包含以下四种类型的字符中的三种: 1.大写字母 2.小写字母 3.数字 4.一个特殊的角色 我发现这段代码非常简单,而且是完整的,但它只是检查了所有4个条件,而不是4个条件中的至少3个 "^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,24}" 如果您能帮助我找出如何在密码上创建javas
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,24}"
如果您能帮助我找出如何在密码上创建javascript验证来完全满足我的上述要求,我将不胜感激
谢谢大家的帮助。我已经修改了@Ehtesham代码并实现了功能
function isValidPassword(pass) {
var lowerRegex = /[a-z]/;
var upperRegex = /[A-Z]/;
var numberRegex = /[0-9]/;
var specialRegex = /[$@$!%*?&]/;
var count = 0;
if (pass.length < 8 || pass.length > 24) {
return false;
}
if (pass.match(lowerRegex)){count += 1;}
if (pass.match(upperRegex)){count += 1;}
if (pass.match(numberRegex)){count += 1;}
if (pass.match(specialRegex)){count += 1;}
if (count >= 3){
return true;
}else{
return false;
}
}
函数为有效密码(pass){
var lowerRegex=/[a-z]/;
var upperRegex=/[A-Z]/;
var numberRegex=/[0-9]/;
变量specialRegex=/[$@$!%*?&]/;
var计数=0;
如果(通过长度<8 | |通过长度>24){
返回false;
}
如果(pass.match(lowerRegex)){count+=1;}
如果(pass.match(upperRegex)){count+=1;}
如果(pass.match(numberRegex)){count+=1;}
如果(pass.match(specialRegex)){count+=1;}
如果(计数>=3){
返回true;
}否则{
返回false;
}
}
您提供的正则表达式由5个主要部分组成:
- 验证长度的模式:
[A-Za-z\d$@$!%*?&]{8,24}
- 至少一个小写字母的正向前瞻:
(?=.[A-z])
- 至少一个大写字母的正向前瞻:
(?=.[A-Z])
- 至少一个数字的正向前瞻:
(?=.*\d)
- 至少一个特殊字符的正向前瞻:
(?=.[$@$!%*?&])
和-模式)
现在,你有4个条件,你希望其中只有3个是匹配的。如上所述,使用独立表达式并检查3是否适用将很容易。然而,一些本机特性(例如jsf的f:validateRegex
)只适用于单个模式
正则表达式以本地方式支持或:|
-因此,要将表达式1和2以及3和4
转换为匹配其中3个的最低要求,您可以使用类似(1和2和3)或(1和2和4)或(1和3和4)或(2和3和4)的表达式,这将涵盖所需的所有用例:
1 2 3 4
1 1 1 0
1 1 0 1
1 0 1 1
0 1 1 1
^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*\d)|(?=.*[a-z])(?=.*[A-Z])(?=.*[$@$!%*?&])|(?=.*[a-z])(?=.*\d)(?=.*[$@$!%*?&])|(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&]))[A-Za-z\d$@$!%*?&]{8,24}$
因此,要在单个模式中匹配所有这些,只需根据需要重新设置lookaheads的范围:
1 2 3 4
1 1 1 0
1 1 0 1
1 0 1 1
0 1 1 1
^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*\d)|(?=.*[a-z])(?=.*[A-Z])(?=.*[$@$!%*?&])|(?=.*[a-z])(?=.*\d)(?=.*[$@$!%*?&])|(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&]))[A-Za-z\d$@$!%*?&]{8,24}$
向下展开:
^(?: - non matching group
(?=.*[a-z])(?=.*[A-Z])(?=.*\d) - one lower, one upper, one number
| - or
(?=.*[a-z])(?=.*[A-Z])(?=.*[$@$!%*?&]) - one lower, one upper, one special
| - or
(?=.*[a-z])(?=.*\d)(?=.*[$@$!%*?&]) - one lower, one number, one special
| - or
(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&]) - one upper, one number, one special
)
[A-Za-z\d$@$!%*?&]{8,24}$ - 8 to 24 chars.
(Debuggex正在使用javascript)
您提供的正则表达式由5个主要部分组成:
- 验证长度的模式:
[A-Za-z\d$@$!%*?&]{8,24}
- 至少一个小写字母的正向前瞻:
(?=.[A-z])
- 至少一个大写字母的正向前瞻:
(?=.[A-Z])
- 至少一个数字的正向前瞻:
(?=.*\d)
- 至少一个特殊字符的正向前瞻:
(?=.[$@$!%*?&])
现在,您只需要应用4个正面外观中的3个。由于lookahead是非消耗性匹配,因此在匹配过程中,正则表达式引擎的光标将保持不变。(这种方法通常用于生成和-模式)
现在,你有4个条件,你希望其中只有3个是匹配的。如上所述,使用独立表达式并检查3是否适用将很容易。然而,一些本机特性(例如jsf的f:validateRegex
)只适用于单个模式
正则表达式以本地方式支持或:|
-因此,要将表达式1和2以及3和4
转换为匹配其中3个的最低要求,您可以使用类似(1和2和3)或(1和2和4)或(1和3和4)或(2和3和4)的表达式,这将涵盖所需的所有用例:
1 2 3 4
1 1 1 0
1 1 0 1
1 0 1 1
0 1 1 1
^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*\d)|(?=.*[a-z])(?=.*[A-Z])(?=.*[$@$!%*?&])|(?=.*[a-z])(?=.*\d)(?=.*[$@$!%*?&])|(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&]))[A-Za-z\d$@$!%*?&]{8,24}$
因此,要在单个模式中匹配所有这些,只需根据需要重新设置lookaheads的范围:
1 2 3 4
1 1 1 0
1 1 0 1
1 0 1 1
0 1 1 1
^(?:(?=.*[a-z])(?=.*[A-Z])(?=.*\d)|(?=.*[a-z])(?=.*[A-Z])(?=.*[$@$!%*?&])|(?=.*[a-z])(?=.*\d)(?=.*[$@$!%*?&])|(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&]))[A-Za-z\d$@$!%*?&]{8,24}$
向下展开:
^(?: - non matching group
(?=.*[a-z])(?=.*[A-Z])(?=.*\d) - one lower, one upper, one number
| - or
(?=.*[a-z])(?=.*[A-Z])(?=.*[$@$!%*?&]) - one lower, one upper, one special
| - or
(?=.*[a-z])(?=.*\d)(?=.*[$@$!%*?&]) - one lower, one number, one special
| - or
(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&]) - one upper, one number, one special
)
[A-Za-z\d$@$!%*?&]{8,24}$ - 8 to 24 chars.
(Debuggex正在使用javascript)
< P>请考虑书签,以备将来参考。下面有一个条目
“常见验证任务>Internet”
也就是说,正如其他人所建议的,如果你把它分解,这看起来是一项相当简单的任务。在我看来,将所有这些需求混搭到一个单一的正则表达式中,虽然这是一个有趣的练习,但有点过头了
(这是Java,但JavaScript中有一些等效的概念。)
如果这是一个函数,将使用快速射击,那么你可能会想。
< P>请考虑书签,以备将来参考。下面有一个条目
“常见验证任务>Internet”
也就是说,正如其他人所建议的,如果你把它分解,这看起来是一项相当简单的任务。在我看来,将所有这些需求混搭到一个单一的正则表达式中,虽然这是一个有趣的练习,但有点过头了
(这是Java,但JavaScript中有一些等效的概念。)
如果这是一个将被rapid fire使用的函数,那么您可能会想使用它。在javascript中,您可以使用以下简单函数
function isValidPassword(pass) {
var lowerRegex = /[a-z]/;
var upperRegex = /[A-Z]/;
var numberRegex = /[0-9]/;
var specialRegex = /[$@$!%*?&]/;
if (pass.length < 8 || pass.length > 24) {
return false;
}
if (pass.match(lowerRegex) && pass.match(upperRegex) &&
pass.match(numberRegex) && pass.match(specialRegex)) {
return true;
}
return false;
}
函数为有效密码(pass){
var lowerRegex=/[a-z]/;
var upperRegex=/[A-Z]/;
var numberRegex=/[0-9]/;
变量specialRegex=/[$@$!%*?&]/;
如果(通过长度<8 | |通过长度>24){
返回false;
}
如果(通过匹配(lowerRegex)和通过匹配(upperRegex)和
帕