正则表达式来评估密码字符串

时间:2017-02-26 08:39:01

标签: php regex regular-language

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

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

Valid words: Abn1, GGh3, 89jK….

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

任何帮助或提醒赞赏。

2 个答案:

答案 0 :(得分:3)

多个前瞻是你的答案

\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}$

答案 1 :(得分:-1)

单一RegExp不是一种好方法。

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

作为一个选项,你可以为每个规则编写3个简单的Regexp,而不是一个大的Regexp。