java - 更高效的密码检查器
问题描述
我被分配的程序有以下规则:
规则:
- 字符数必须在 [6, 10]
2. 范围内必须有 >= 2 个字符 ['a', 'z']
3. 范围内必须有 >= 2 个字符 ['A', 'Z']
- ['0', '9'] 范围内必须有 >= 2 个字符
例如,pw1("aaBC09-+") 应该返回 true,而 pw1("aabC09-+") 应该返回 false。
我附上了我的代码,但我可以使用更高效/更简洁的代码吗?
import java.util.*;
public class PassChecker2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// Prompt User to Enter String
System.out.print("Enter Password: ");
// Grab User Generated String
String pw = input.next();
// Pass String to be Checked
boolean valid_pw = checkPW(pw);
if(valid_pw)
System.out.println(pw + " is a valid password!");
else
System.out.println(pw + " is not a valid password!");
}
public static boolean checkPW(String pw)
{
int pwLowerCase = 0,
pwUpperCase = 0,
pwNumber = 0;
// Return False if PW is too Small / Large
if(!(pw.length() >= 2 && pw.length() <= 10))
return false;
for(int position = 0; position < pw.length(); ++position)
{
char character = pw.charAt(position);
if(character >= 'a' && character <= 'z')
++pwLowerCase;
else if(character >= 'A' && character <= 'Z')
++pwUpperCase;
else if(character >= '1' && character <= '9')
++pwNumber;
}
return (pwLowerCase >= 2 && pwUpperCase >= 2 && pwNumber >= 2);
}
}
解决方案
恕我直言,我们可以使用正则表达式进行密码检查,而不是编写 java 代码:
^(?=.*[A-Z].*[A-Z])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z]).{6,10}$
检查表达式是否满足您的需求:
然后,您可以使用Matcher
并Pattern
在java.util.regex
包中使用正则表达式
正则表达式的优点:
可以在不同的语言中重复使用。假设对于网站开发,我们可能同时使用客户端检查和服务器端检查,我们不会为 javascript 和 java-backend 编写检查器,而是在双方都使用正则表达式。
推荐阅读
- javascript - 使用 DataTables 时,某些浏览器中的输入字段在刷新时不会清除
- spring - 如何将 ElasticSearch 7.0 版本与 Spring Boot 集成?
- image - 如何在颤振中绘制图像并恢复新图像
- scala - 从apache spark中的Dataframe中选择不同的(在一列上)不为空(在所有其他列上)值
- dynamics-crm - D365:导入前比较解决方案
- razor - 如何修复部分视图以返回结果
- css - 如何在不拉伸/裁剪 React Native 中的图像的情况下将大图像放入视图中?
- apache-nifi - NiFi UpdateRecord 不会更新嵌套字段
- javascript - 如何获取 UI-GRID 中所有页面的所有行的所有总数
- jasper-reports - 如何限制 jasper 报告不在每个组的新页面上开始?