【发布时间】:2016-10-14 07:08:55
【问题描述】:
密码必须包含: 1 大写字母 1 个小写字母 1 位数 1 个特殊符号 最少 8 个符号
这是我的正则表达式:
^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@_$%^&*-]).{8,}$
但是当我尝试使用密码进行验证时:Test_123 它返回给我false
这是我的代码:
public class PasswordCheck {
static Logger logger = Logger.getLogger(CommonHelper.class);
private static final String PASSWORD_PATTERN = "^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@_$%^&*-]).{8,}$";
private Pattern pattern;
private Matcher matcher;
public PasswordCheck() {
pattern = Pattern.compile(PASSWORD_PATTERN);
}
/**
* Validate password with regular expression
*
* @param password
* password for validation
* @return true valid password, false invalid password
*/
public boolean validate(final String password) {
matcher = pattern.matcher(password);
System.out.println(password);
System.out.println(matcher.matches());
return matcher.matches();
}
}
我只是尝试使用相同的文本在验证函数中设置新字符串:Test_1523 并返回 true,但是当我通过休息服务发布此字符串并将其传递给函数时返回 false
【问题讨论】:
-
我检查了regexr.com 和正则表达式没关系,请你发布你的代码吗?
-
你设置了不区分大小写的修饰符吗?
-
在“matcher = pattern.matcher(password);”上添加断点验证方法内的行并查看“密码”参数的值是多少。我只是想检查它是否包含任何其他字符。
-
我深入研究并意识到问题不是正则表达式,而是来自休息服务的字符串。仍然不知道为什么,但是当我像这样格式化它时: byte bytes[] = pass.getBytes("ISO-8859-1"); String checkPassword = new String(bytes, "UTF-8"); if (passCheck.validate(checkPassword)) { 它开始正常工作。