我需要密码规则。以下是规则。
密码必须遵循以下准则:
>
当用户指定不符合上述规则的密码时,返回消息说明:
密码长度必须至少为8个字符,并包含以下4个选项中的3个:
请帮助我获得一个正则表达式来处理上述条件。
我感谢你的帮助。以下是我的要求的解决方案
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;
谢谢,兰基
我会这样做:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ValidatePassword
{
public static void main (String[] args)
{
String pw = "abaslkA3FLKJ";
// create an array with 4 regex patterns
Pattern [] patternArray = {
Pattern.compile("[a-z]"),
Pattern.compile("[A-Z]"),
Pattern.compile("[0-9]"),
Pattern.compile("[&%$#]")
};
int matchCount = 0;
// iterate over the patterns looking for matches
for (Pattern thisPattern : patternArray) {
Matcher theMatcher = thisPattern.matcher(pw);
if (theMatcher.find()) {
matchCount ++;
}
}
if (matchCount >= 3) {
System.out.println("Success");
}
else {
System.out.println("Failure: only " + matchCount + " matches");
}
}
}
我只在第四个模式中添加了几个特殊字符。。。你必须根据自己的需要修改它。可能需要用反斜杠转义某些字符。您可能还需要添加其他约束,例如检查是否没有空格。那就交给你了。
这是,如果你想要一个优雅的正则表达式,尽可能接近
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&'])[^ ]{8,}$
其基本思想是使用一种称为“积极前瞻”的技术:
(?=.*PutHereWhatYouWantToAllow)
你的额外要求4分之3不容易用正则表达式解决,因为你不能让它们基本上计数。你可以写出上面正则表达式的必要排列(如果没有意义,请告诉我),但这将是一个很长的正则表达式。您可以做的是在代码中写出排列,这样正则表达式就可以保持可维护性,因为您没有逐字重复这些模式。
如果你告诉我你的语言,我会试试的(C#?)因为这是一个很好的挑战。
更新1
下面是一个正则表达式,它至少能满足你的3个要求(也可以满足4个要求),只是为了迎接挑战。不要在生产中使用它,而是在语言中循环使用注释中提到的单个正则表达式。
^((? =.[a-z].[A-Z].[\d])|(? =.[a-z].[\d].[A-Z])|(? =.[ A-Z].[a-z].[\d])|(? =.[ A-Z].[\d].[a-z])|(? =.[\d].[a-z].[A-Z])|(? =.[\d].[A-Z].[a-z])|(? =.[a-z].[A-Z].[! @#$%^
更新2
这是在java采取的方法
从我读到的评论中,你正在进行如下测试
我认为你没有走在正确的轨道上。只有当所有字符都是小写的时候,小写才会报告成功,而不仅仅是一个。其他的也一样。
这是4个单独的正则表达式,其中至少3个应报告匹配
[a-z]
[A-Z]
\d
[!@#$%^&']
下面是密码不应该包含空格的测试
^[^ ]*$
该测试至少包含8个字符
.{8,}
所以我拆分了需求,而不是合并它们。这应该会让代码更容易阅读,尤其是当一个人从正则表达式开始的时候。
我有以下密码验证规则: 至少8个字符 我试图找到这个规则的正则表达式模式,最接近的是: 但这并不适用于所有规则。 我对正则表达式是新手,如果有任何可以学习正则表达式的资源,我将不胜感激。
问题内容: 我在网上找到了一个脚本,并且在JavaScript中有一个密码正则表达式。我仍然想使用它,但是为了获得更高的安全性,我也想使用PHP来验证我的密码,但是我对正则表达式毫无用处。 要求: 必须至少8个字符 必须包含至少1个数字 必须至少包含一个大写字符 必须至少包含一个小写字符 如何构造正则表达式字符串以满足这些要求? 问题答案: 我发现在一个大的正则表达式中执行此操作有点像代码维护的噩
主要内容:基本模式匹配,字符簇,确定重复出现基本模式匹配 一切从最基本的开始。模式,是正则表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: 这个模式包含一个特殊的字符 ^,表示该模式只匹配那些以 once 开头的字符串。例如该模式与字符串 "once upon a time" 匹配,与 "There once was
7.1 基本模式匹配 一切从最基本的开始。模式,是正规表达式最基本的元素,它们是一组描述字符串特征的字符。模式可以很简单,由普通的字符串组成,也可以非常复杂,往往用特殊的字符表示一个范围内的字符、重复出现,或表示上下文。例如: ^once 这个模式包含一个特殊的字符^,表示该模式只匹配那些以once开头的字符串。例如该模式与字符串"once upon a time"匹配,与"There once
问题内容: 谁能帮助我创建用于密码验证的正则表达式。 条件为“密码必须包含8个字符和至少一个数字,一个字母和一个唯一字符,例如 问题答案:
本文向大家介绍最新密码验证正则表达式,包括了最新密码验证正则表达式的使用技巧和注意事项,需要的朋友参考一下 正则表达式验证密码功能在项目中经常被使用到,但是很多朋友还是不大会使用密码正则表达式进行验证,本文小编为大家整理了php密码验证正则表达式、python密码强度正则,当然还有大家常用到的js正则表达式,希望大家喜欢。 刚开始复习一下,什么是正则表达式? 在编写处理字符串的程序或网页时,经常有