2017-02-26 142 views
1

我正在做一个小项目,我需要评估一个只有四个字符的字符串[我可以写一点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

这是有点不清楚,这是否意味着字符串应该包含至少4个字符?单词或*字符串*?尝试[a] [a-zA-z] * [d](?= [az \ d] * [az])[ Z0-9] {4,}'](https://regex101.com/r/ej2o4T/1)。或者,如果整个字符串应该匹配,[[^(?=。* [AZ])(?=。* \ d)(?=。* [az])[a-zA-Z0-9] {4, } $'](https://regex101.com/r/C1HkYT/1)。 –

+0

@WiktorStribiżew,字符串必须只包含4个字符,不多也不少 – Mubin

+0

@downvoter,您对此有何好的想法? – Mubin

回答

3

Muultiple向前看符号是你的答案

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

我已经把这个RE放到环境中了,而且看起来没什么用。 http://regexr.com/3fcvp – Mubin

+0

@Mubin单输入版本是如果你有一个文本框你打算让别人只输入这4个字符,顶级版本检测这些模式在较大的文本。这取决于你的意图是什么。 –

+0

工作,谢谢 – Mubin

-1

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

最好的解决办法只是CHEC k循环迭代字符中的规则。

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

+0

一个正则表达式实际上是一个理想的解决方案。表达式很简单,就像表达式一样。 –

+0

我宁愿将每个测试都保存在单独的函数中 - 以便能够稍后单独修改每个测试 –

+0

但是我需要单个'RE'来实现这一点,并且@ cfqueryparam的答案对我有用 – Mubin