java - 验证正则表达式

标签 java regex

我需要使用 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/

相关文章:

java - 服务器处理许多客户端java

c++ - C++ 中的正则表达式从正则表达式中获取文本任何部分中的字符串

java - 如何在 Java 中获得等效的 C++ 常量指针?

java - 有没有办法让 mysql 返回的行可以被 5 整除

java - 重新格式化 Java 字符串

java.lang.NoClassDefFoundError : com. ibatis.common.resources.Resources

由分隔符分隔的十进制范围的 Java 正则表达式

javascript - RegExp,如何在 javascript 中连接字符串来创建动态正则表达式?

java - 整个字符串的正则表达式

regex - AS3 保留空白行,但删除换行符后单词之前的前导空格