如何制作正则表达式来测试用户名复杂性要求?

时间:2011-05-16 02:51:42

标签: php regex

我正在学习正则表达式并且有一个问题;答案将帮助我更好地理解正则表达式。

输入是用户名。此用户名应包括至少4个小写字母(a-z),一个上部字符(A-Z)和2个数字。它最多也应该有10个字符。如何制作正则表达式来测试这些要求?

2 个答案:

答案 0 :(得分:8)

对每个条件使用带有先行/ lookbehinds的正则表达式。如下所示:

^(?=(.*[a-z]){4})(?=.*[A-Z])(?=(.*\d){2}).{7,10}$

我认为正则表达式是自我解释的,告诉我你是否希望我对每个部分进行解释。

好的,根据OP的要求解释:

(?=ABC)(?!ABC)(?<=ABC)(?<!ABC) - 是在表达式之前/之后匹配组的前瞻和后视,并且不会在结果中包含它们。 =!为正,(?=(.*[a-z]){4})之为为负。

例如,.{7,10}确保主表达式(.{7,10})具有至少4个小写字符。同样,我们每个条件都有一个。 {{1}}确保最多10(最低7 - 4低+ 1高+ 2位)

有这样严格约束的密码(这样的用户名更糟糕)不推荐@SLaks提及,但是可以进行一些很好的正则表达式学习:)另外,正则表达式并不以性能着称,特别是一个巨大的。

答案 1 :(得分:1)

可能很难将所有这些组合成单个正则表达式,因为您没有设置顺序。您可以查看php是否支持在regex表达式中分组构造(lookahead / lookbehind),因为您可以使用它们。

这是.net正则表达式规范的链接。我知道你在看php,但它应该或多或少地类似于你实际可以做什么类型的模式匹配。

http://msdn.microsoft.com/en-us/library/az24scfc.aspx