如何只允许两个字母两个两个数字和两个特殊字符,但位置在正则表达式中不是事实



当我为只允许两个字母两个数字和两个特殊字符创建正则表达式时,我必须面对问题。创建正则表达式实际上不是问题。但是当我更改字符的位置时,正则表达式显示不匹配。所以请帮助我如何解决这些问题。

[A-Za-z]{2}[0-9]{2}[!@#$%^&]{2}

这种类型的匹配最好通过展望来完成:

^(?=.*d.*d)(?=.*[A-Za-z].*[A-Za-z])(?=.*[!@#$%^&].*[!@#$%^&]).{6}$

(?= )不会抓取任何字符,它只是向前看,因此您可以检查不同的条件,然后只有在所有前瞻条件通过时,最后才用一个简单的.{6}$抓取它们。剩下的唯一条件是从开头(^(到结尾($(正好有6个字符。

当每个子模式重复时,您也可以这样做:

^(?=(?:.*d){2})(?=(?:.*[A-Za-z]){2})(?=(?:.*[!@#$%^&]){2}).{6}$

最新更新