java - 正则表达式 Java 可选字符
问题描述
我有一个这个正则表达式;
("(?=.*[a-z]).*")
("(?=.*[0-9]).*")
("(?=.*[A-Z]).*")
("(?=.*[!@#$%&*()_+=|<>?{}\\[\\]~-]).*")
检查密码的要求:长度 = 8,然后是以下三个 - 小写字母、大写字母、数字、特殊字符。上述 4 中的 3 + 长度为 8 是必需的。
我所拥有的工作,直到密码中有一个空格,然后它会打印错误消息。换句话说,我如何在我的特殊字符列表中包含空格,谢谢!
解决方案
你可以试试这个:
String password = "pA55w$rd";
int counter = 0;
if(password.length() >= 8)
{
Pattern pat = Pattern.compile(".*[a-z].*"); // Lowercase
Matcher m = pat.matcher(password);
if(m.find()) counter++;
pat = Pattern.compile(".*[0-9].*"); // Digit
m = pat.matcher(password);
if(m.find()) counter++;
pat = Pattern.compile(".*[A-Z].*"); // Uppercase
m = pat.matcher(password);
if(m.find()) counter++;
pat = Pattern.compile(".*\\W.*"); // Special Character
m = pat.matcher(password);
if(m.find()) counter++;
if(counter == 3 || counter == 4)
{
System.out.println("VALID PASSWORD!");
}
else
{
System.out.println("INVALID PASSWORD!");
}
}
else
{
System.out.println("INVALID PASSWORD!");
}
有两种情况:要么匹配所需的长度,要么不匹配。
如果它确实匹配长度,它会检查 4 种情况中的每一种,并在每次匹配时增加一个计数器。由于您希望它匹配 3 或 4 个案例,因此我在此处放置了一个 if-else 案例。
推荐阅读
- python - 美丽的汤/硒网页抓取
- python - 从文本文件创建文件夹
- flutter - Firestore中状态更改的问题与switch和flutter true和false
- queue - printf 从各种任务中进行控制台
- javascript - 如何将 JS 生成的按钮附加到 div 而不是正文
- xslt-3.0 - XSLT 3:空节点集的 xsl:analyze-string 不执行 xsl:non-matching-substring
- reactjs - 如何使用 Protractor 为 ReactJS 应用程序测试和编写测试用例?
- flutter - 我想在用户第一次在应用程序中唱歌时设置默认主题,而无需“选择”按钮或复选框
- reactjs - TS2322: Type 'NotRequiredArraySchema
' is not assignable to type 'Ref | Schema I'm solving this problem. I'm using yup for formik validation. Code
- python - How to define a sentence as ,Starting with "uppercase letter" end ending with ".", in a txt file