我正在做一个小项目,我需要评估一个只有四个字符的字符串[我可以写一点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, ….
任何帮助或提醒赞赏。
答案 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。