密码模式与匹配器不匹配 class
Password Patteren does not matched with the Matcher class
我的密码应该是:
"密码应至少包含一个大写字母、一个小写字母、一位数字和一个特殊字符,最少八个字符长度"
我使用的模式是:^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$#!%*?&])[A-Za-z\d$@$#!%*?&]{8,}
因此,我在 Constant.java 文件中创建了如下函数:
public static Boolean passwordMatcher(TextInputLayout edtText,String string) {
Pattern pattern = Pattern.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$#!%*?&])[A-Za-z\\d$@$#!%*?&]{8,}");
Matcher matcher = pattern.matcher(edtText.getEditText().getText().toString());
boolean isMatched = matcher.matches();
if (isMatched) {
return true;
}
if (!isMatched) {
edtText.setErrorEnabled(true);
edtText.setError("" + string);
edtText.setFocusable(true);
return false;
}
return true;
}
在我的 MainActivity.java 文件中,我检查了如下验证:
if (!Constant.passwordMatcher(edtPassword, mContext.getResources().getString(R.string.error_activity_signup_password_invalid))) {
return;
}
但是,即使我尝试过,我也没有成功:'Jaimin123#' 作为我的密码。
总是在我的 TextInputLayout 中设置错误。
可能是什么问题?
谢谢。
试试这个
^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@#!%*?&]).{8,}$
如果您不想在密码中使用白色 space,还包括 (?=\S+$)
尝试使用以下正则表达式进行密码匹配。
^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$
此正则表达式将检查以下规则:
- 至少一个大写字母
- 至少一个小写字母
- 至少一位数字
- 至少一个特殊字符
- 长度至少为 8
试试这个代码:
public void checkPattern(String password) {
Pattern pattern = Pattern.compile("(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*\W).{8,}");
Matcher matcher = pattern.matcher(password);
boolean isMatched = matcher.matches();
System.out.println(isMatched);
}
尝试
public boolean matchesPattern(String password) {
Pattern pattern = Pattern.compile("^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$");
Matcher matcher = pattern.matcher(password);
return matcher.matches();
}
我的密码应该是:
"密码应至少包含一个大写字母、一个小写字母、一位数字和一个特殊字符,最少八个字符长度"
我使用的模式是:^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$#!%*?&])[A-Za-z\d$@$#!%*?&]{8,}
因此,我在 Constant.java 文件中创建了如下函数:
public static Boolean passwordMatcher(TextInputLayout edtText,String string) {
Pattern pattern = Pattern.compile("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$#!%*?&])[A-Za-z\\d$@$#!%*?&]{8,}");
Matcher matcher = pattern.matcher(edtText.getEditText().getText().toString());
boolean isMatched = matcher.matches();
if (isMatched) {
return true;
}
if (!isMatched) {
edtText.setErrorEnabled(true);
edtText.setError("" + string);
edtText.setFocusable(true);
return false;
}
return true;
}
在我的 MainActivity.java 文件中,我检查了如下验证:
if (!Constant.passwordMatcher(edtPassword, mContext.getResources().getString(R.string.error_activity_signup_password_invalid))) {
return;
}
但是,即使我尝试过,我也没有成功:'Jaimin123#' 作为我的密码。 总是在我的 TextInputLayout 中设置错误。
可能是什么问题?
谢谢。
试试这个
^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@#!%*?&]).{8,}$
如果您不想在密码中使用白色 space,还包括 (?=\S+$)
尝试使用以下正则表达式进行密码匹配。
^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$
此正则表达式将检查以下规则:
- 至少一个大写字母
- 至少一个小写字母
- 至少一位数字
- 至少一个特殊字符
- 长度至少为 8
试试这个代码:
public void checkPattern(String password) {
Pattern pattern = Pattern.compile("(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*\W).{8,}");
Matcher matcher = pattern.matcher(password);
boolean isMatched = matcher.matches();
System.out.println(isMatched);
}
尝试
public boolean matchesPattern(String password) {
Pattern pattern = Pattern.compile("^(?=.*?[A-Z])(?=(.*[a-z]){1,})(?=(.*[\d]){1,})(?=(.*[\W]){1,})(?!.*\s).{8,}$");
Matcher matcher = pattern.matcher(password);
return matcher.matches();
}