【问题标题】:Regular expression to evaluate password string评估密码字符串的正则表达式
【发布时间】:2017-07-16 22:13:00
【问题描述】:

我正在做一个小项目,我需要评估一个只有四个字符的字符串[我可以写一点 RE,但这个让我明白了。]。 我需要编写一个正则表达式,它必须匹配1 upper case word、1 lower case word、one digit 和一个随机字符,如[a-zA-Z0-9]。字符串中的顺序无关紧要。

以下是一些应该通过或失败的案例字符串。

Valid words: Abn1, GGh3, 89jK….

Invalid words: abcd, 112a, abDb, 2Ab, 4, AA, ….

感谢任何帮助或提醒。

【问题讨论】:

标签: php regex regular-language


【解决方案1】:

多个前瞻是您的答案

\b(?=[a-zA-Z0-9]*[a-z])(?=[a-zA-Z0-9]*[A-Z])(?=[a-zA-Z0-9]*[0-9])[a-zA-Z0-9]{4}\b

(?=[a-zA-Z0-9]*[a-z])    # string contains any lowercase character
(?=[a-zA-Z0-9]*[A-Z])    # string contains any uppercase character
(?=[a-zA-Z0-9]*[0-9])    # string contains any digit
[a-zA-Z0-9]{4}           # 4 characters, since the 4th is  the type that can fit in any of the three

如果字符串来自单个输入(如 4 个字符的文本框,则应将单词边界 (\b) 替换为 ^$,例如

^(?=[a-zA-Z0-9]*[a-z])(?=[a-zA-Z0-9]*[A-Z])(?=[a-zA-Z0-9]*[0-9])[a-zA-Z0-9]{4}$

【讨论】:

  • 我已将此 RE 放到环境中,但它似乎不起作用。 regexr.com/3fcvp
  • @Mubin 单输入版本是,如果您有一个文本框,您打算让某人只输入这 4 个字符,那么顶级版本会在较大的文本中检测这些模式。这取决于你的意图是什么。
  • 为什么要进行多重前瞻?它让我发疯,不知道“为什么”
  • @Carine 因为即使满足其中一个条件,单次交替前瞻也会通过。
  • @RegularJoe 我希望我知道这意味着什么,哈哈......我花了很多时间试图找到一种方法来使用带 + 的括号,但它取决于订单......没有办法告诉它这些事情......以任何顺序?
【解决方案2】:

单一的正则表达式不是这样做的好方法。

在循环迭代字符中检查规则的最佳解决方案。

作为一个选项,您可以为每个规则编写 3 个简单的正则表达式,而不是一个大的正则表达式。

【讨论】:

  • 一个正则表达式实际上是一个理想的解决方案。表达式非常简单。
  • 我更喜欢将每个测试保留在单独的函数中 - 以便以后能够单独修改每个测试
  • 但我需要一个 RE 来实现这一点,@cfqueryparam 的答案对我有用
猜你喜欢
  • 2017-05-19
  • 1970-01-01
  • 2012-07-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
相关资源
最近更新 更多