密码规则的正则表达式

Ram*_*mki 0 regex

我需要密码规则.以下是规则.

密码必须遵循以下准则:

  • 至少八个字符
  • 包含以下4个选项中的3个:小写字母,大写字母,数字或特殊字符
  • 当用户指定不符合上述规则的密码时,请返回以下消息:

    密码长度必须至少为8个字符,并包含以下4个选项中的3个:

    • 小写字母(az)
    • 大写字母(AZ)
    • 号码(0-9)
    • 特殊字符(!@#$%^&')

请帮我得到一个正则表达式来处理上述条件.

我感谢你的帮助.以下是我的要求的解决方案

if(password.matches("^(?=.*[0-9]).{1,}$")){
validCount++;
}
if(password.matches("^(?=.*[a-z]).{1,}$")){
validCount++;
}
if(password.matches("^(?=.*[A-Z]).{1,}$")){
validCount++;
}
if(password.matches("^(?=.*[@#$%^&+=]).{1,}$")){
validCount++;
}
return validCount >= 3 ? true : false;
Run Code Online (Sandbox Code Playgroud)

谢谢,拉姆基

buc*_*ley 11

这就是,如果你想要一个优雅的正则表达式,尽可能接近你

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&'])[^ ]{8,}$
Run Code Online (Sandbox Code Playgroud)

基本思想是使用一种称为"积极前瞻"的技术:

(?=.*PutHereWhatYouWantToAllow)
Run Code Online (Sandbox Code Playgroud)

你的额外要求中有3个是不容易用正则表达式来解决的,因为你基本上不能算它们.你可以写出上面正则表达式的必要排列(告诉我它是否没有意义),但这会产生一个很长的正则表达式.您可以做的是在代码中写出排列,以便正则表达式保持可维护性,因为您不是按字面意思重复模式.

如果你告诉我你的语言(C#?),我会有机会,因为这是一个很好的挑战.

更新1

这里的正则表达式将满足至少3个您的要求(也允许4个),只是为了挑战它.不要在生产中使用它,而是使用注释中提到的单个正则表达式的语言循环.

^((α=.[az]. [AZ].[\ d])|(α=. [az].[\ d]. [AZ])|(α=.[AZ]. [az].[\ d])|(?=. [AZ].[\ d]. [az])|(?=.[\ d]. [az].[AZ])|(?=. [\ d] .[AZ]. [az])|(?=.[az]. [AZ].[!@#$%^&'])|(?=. [az].[!@#$%^& ']. [AZ])|(?=.[AZ]. [az].[!@#$%^&'])|(?=. [AZ].[!@#$%^&'] . [az])|(?=.[!@#$%^&']. [az].[AZ])|(?=. [!@#$%^&'].[AZ]. [ az])|(?=.[az]. [\ d].[!@#$%^&'])|(?=. [az].[!@#$%^&']. [\ d])|(?=.[\ d]. [az].[!@#$%^&'])|(?=. [\ d].[!@#$%^&']. [ az])|(?=.[!@#$%^&']. [az].[\ d])|(?=. [!@#$%^&'].[\ d]. [ az])|(?=.[AZ]. [\ d].[!@#$%^&'])|(?=. [AZ].[!@#$%^&']. [\ d])|(?=.[\ d]. [AZ].[!@#$%^&'])|(?=. [\ d].[!@#$%^&']. [ AZ])|(?=.[!@#$%^&']. [AZ].[\ d])|(?=. [!@#$%^&'].[\ d]. [ AZ]))[^] {8,} $

更新2

这是采用java的方法

从我看到的评论中你正在测试如下

  • 小写"^ [az]*$";
  • 大写"^ [AZ]*$";
  • 位数= "^ [0-9]*$";

我不认为你在这里走在正确的轨道上.如果所有字符都是小写的,则小写仅报告成功,而不只是一个.其余的相同.

这些是4个单独的正则表达式,其中至少3个应报告匹配

[a-z]
[A-Z]
\d
[!@#$%^&']
Run Code Online (Sandbox Code Playgroud)

以下是密码不应包含空格的测试

^[^ ]*$
Run Code Online (Sandbox Code Playgroud)

测试至少8个字符

.{8,}
Run Code Online (Sandbox Code Playgroud)

所以我分开了要求而不是将它们结合起来.这应该使代码更易读,特别是如果以正则表达式开头.

  • 没问题.测试java循环中的所有4个需求,并在匹配3时立即停止,这似乎比在一个怪物正则表达式中更加可维护.但我无法自拔,并将在以后发布那个大正则表达式. (2认同)