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

cey*_*lan 4 php regex

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

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

man*_*lds 8

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

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

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

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

(?=ABC),(?!ABC)并且(?<=ABC),(?<!ABC)-是向前看符号和前相匹配的组/你的表情后,不包括他们在结果lookbehinds.一个=是积极的,一个!是消极的.

例如,(?=(.*[a-z]){4})确保main表达式(.{7,10})具有至少4个小写字符.同样,我们每个条件都有一个..{7,10}确保最大10(最低7 - 4低+ 1高+ 2位)

拥有如此严格约束的密码(这样的用户名更糟糕)不建议像@SLaks那样提及,但是可以进行一些很好的正则表达式学习:)此外,正则表达式并不以性能而闻名,尤其是巨大的性能.

  • 我不敢苟同.这不是不言自明的. (2认同)