我需要使用 Java 验证密码字符串。这是验证的要求:
- 至少1个号码
- 至少 1 个字母字符
- 集合中至少有 1 个字符 !@#$%^&*()_+=-~`][{};':"/.>?,<
- 8 到 20 个字符
在扭来扭去、用头撞墙之后,我想出了这个正则表达式
if (!password.matches("^(?=.+[0-9])(?=.+[a-zA-Z])(?=.+[\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E])[0-9a-zA-Z\\x21-\\x2F\\x3A-\\x40\\x5B-\\x60\\x7B-\\x7E]{8,20}$")) {
}
这看起来太可怕和疯狂了。有没有更好的方法来实现这个使命?
最佳答案
我建议将正则表达式用于它们最擅长的地方,而将代码用于正则表达式不擅长的地方。像这样的东西。 (抱歉,我没有测试过这段代码,但即使我犯了错误它也应该给出了想法并且它不会运行。)
Pattern special_chars = Pattern.compile("[!@#$%^&*()_+=-~`\][{};':\"/.>?,<]");
Pattern number_chars = Pattern.compile("[0-9]");
Pattern letter_chars = Pattern.compile("[a-zA-Z]");
boolean valid;
valid = (special_chars.matcher(password).find() &&
number_chars.matcher(password).find() &&
letter_chars.matcher(password).find() &&
8 <= password.length() && password.length() <= 20);
关于java - 验证正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13907789/