我正在学习正则表达式并且有一个问题;答案将帮助我更好地理解正则表达式。
输入是用户名。此用户名应包括至少4个小写字母(a-z),一个上部字符(A-Z)和2个数字。它最多也应该有10个字符。如何制作正则表达式来测试这些要求?
答案 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,但它应该或多或少地类似于你实际可以做什么类型的模式匹配。