【问题标题】:Java creating a complex regular expression for password validationJava为密码验证创建一个复杂的正则表达式
【发布时间】:2015-09-10 22:41:15
【问题描述】:

我现在有一个正则表达式,它在我的 Java 应用程序中强制要求密码。

我现在想修改此表达式以反映此政策:

至少 7 个字符 包含以下三个或更多字符类别中的字符:

(a-z), (A-Z), (0-9), (@#$,.)

开头或结尾的字符不计入其字符类别。

这对于正则表达式来说太复杂了吗?如果没有,我如何修改现有的以遵守新的?

谢谢

这是我现在的:

String credPattern = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%,.]).{7,})";
pattern = Pattern.compile(credPattern);
Matcher matcher = pattern.matcher(pw);

【问题讨论】:

  • 必读的xkcd漫画:xkcd.com/936
  • 如果您在创建正则表达式时遇到问题,当您需要更新它时会遇到更多问题。我建议你为此使用图书馆。见stackoverflow.com/questions/3200292/…
  • 如果 Java 代码可以执行相同的验证,而且更易于阅读和维护,为什么还要使用正则表达式?
  • @Malt 这就是我最终要做的。

标签: java regex


【解决方案1】:

此模式将应用所有四个字符类别条件、开始/结束和最小字符数要求:

^.(?=.*[a-z].)(?=.*[A-Z].)(?=.*[0-9].)(?=.*[@#$,.].).{6,}$

Demo
你想要做的就是把它分成四个正则表达式模式,像这样

^.(?=.*[a-z].)(?=.*[A-Z].)(?=.*[0-9].).{6,}$    
^.(?=.*[a-z].)(?=.*[A-Z].)(?=.*[@#$,.].).{6,}$  
^.(?=.*[a-z].)(?=.*[0-9].)(?=.*[@#$,.].).{6,}$  
^.(?=.*[A-Z].)(?=.*[0-9].)(?=.*[@#$,.].).{6,}$  

运行每一个并使用您的脚本语言计算匹配的数量,如果大于 3 则表示成功。
注意:每个原始模式都允许使用空格。

【讨论】:

    猜你喜欢
    • 2022-11-25
    • 2013-06-01
    • 2014-04-14
    • 2023-02-03
    • 1970-01-01
    • 2018-09-30
    • 2013-01-19
    • 1970-01-01
    • 2017-04-16
    相关资源
    最近更新 更多