Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为长度为8-24且至少包含以下3项的密码验证创建正则表达式:小写、大写、数字、特殊字符_Javascript_Regex_Validation_Passwords - Fatal编程技术网

Javascript 如何为长度为8-24且至少包含以下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

我想使用java脚本验证以下密码标准

a、 密码至少为8个字符,不超过24个字符

b、 每个密码必须至少包含以下四种类型的字符中的三种:

1.大写字母

2.小写字母

3.数字

4.一个特殊的角色

我发现这段代码非常简单,而且是完整的,但它只是检查了所有4个条件,而不是4个条件中的至少3个

"^(?=.*[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个。由于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)


您提供的正则表达式由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)和
帕