【问题标题】:Password expression is not working as expected密码表达式未按预期工作
【发布时间】:2016-01-18 03:11:49
【问题描述】:

我有一个如下所示的密码表达式。

它必须允许一个小写字母、一个大写字母、一个数字或一个小写字母、一个大写字母、一个特殊字符或一个小写字母、一个大写字母、一个数字、一个特殊字符。我使用 | 加入了所有三个条件要么。它应该最少 8 个字符,最多 20 个字符。它应该只允许特定的特殊字符 $@#!%。但是在这里它允许所有特殊字符,尽管我提到了特定的集合。这是主要问题。我花了很多时间来改变模式,但仍然允许所有特殊字符。 ——

我不明白为什么它允许 ^ (Marr1234^)?

(((?=.\d)(?=.[az])(?=.[AZ])(?=.[$@# !%]))|((?=.[az])(?=.[AZ])(?=.[$@#!%]))|((? =.\d)(?=.[az])(?=.[AZ]))).{8,20}

任何想法

【问题讨论】:

  • 我不明白你的实际问题是什么。
  • 我的密码允许 ^ ,我的正则表达式中没有 ^。
  • 你想达到什么目的?有什么提示吗?
  • 这会很棒,所以请查看您实际尝试检查匹配的代码...
  • 好的,我的密码应该只允许特定的特殊字符 $@#!% 但我不明白为什么它允许 ^。我的常规表达方式是休闲。 (((?=.*\\d)(?=.*[az])(?=.*[AZ])(?=.*[$@#!%]))|((?=.* [az])(?=.*[AZ])(?=.*[$@#!%]))|((?=.*\\d)(?=.*[az])(?= .*[AZ])))。{8,20}

标签: java regex passwords


【解决方案1】:

您是否考虑过 .{8,20} 匹配您的输入?这个词匹配每个字符(.==every character)8 到 20 次...所以这也匹配 ^-character

【讨论】:

  • 对于我的情况可能是一种解决方案
  • 我应该如何避免 .{8,20} 我需要提及密码最小和最大范围的地方。有没有可能的解决方案 (((?=.*\\d)(?=.*[az])(?=.*[AZ])(?=.*[$@#!%])) |((?=.*[az])(?=.*[AZ])(?=.*[$@#!%]))|((?=.*\\d)(?=.* [az])(?=.*[AZ]))).{8,20}
  • 我对你的正则表达式有点困惑。你能用文字描述一下你想匹配什么吗?
  • 它必须允许一个小写字母、一个大写字母、一个数字或一个小写字母、一个大写字母、一个特殊字符或一个小写字母、一个大写字母、一个数字、一个特殊字符.我使用 | 加入了所有三个条件要么。它应该最少 8 个字符,最多 20 个字符。它应该只允许特定的特殊字符 $@#!%。但是在这里它允许所有特殊字符,尽管我提到了特定的集合。这是主要问题。我花了很多时间来改变模式,但仍然允许所有特殊字符。
  • 顺便说一句:为有帮助的答案投票是一种常见的网络礼仪;-)
【解决方案2】:

感谢 rdmuller 的帮助。我能够修复它。 我需要添加范围 [A-Za-z0-9] 并避免“。”像。{8,20}。

这是我使用的表达方式

^(?=.\d)(?=.[az])(?=.*[AZ])[A-Za-z0-9]{8,20}$

【讨论】:

  • 太棒了!因此,祝您在 StackOverflow 上的下一次互动一切顺利!
猜你喜欢
  • 2014-04-28
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多