所以我正在尝试创建一个执行以下操作的正则表达式:
最少12个字符,需要大写,需要小写,需要2个数字值或2个特殊字符。
目前,我有以下内容:
org.apache.jmeter.util.JMeterUtils.setProperty("threads", "10");
使用1个数字或1个特殊字符,而不是2个。我尝试将{2}添加到OR条件中,但是,这需要两个不正确的组合。
任何帮助将不胜感激。
答案 0 :(得分:1)
您应将(?=.*[!@#$%^&*()]|\D*\d)
前瞻替换为(?:(?=(?:[^!@#$%^&*()]*[!@#$%^&*()]){2})|(?=(?:\D*\d){2}))
。正则表达式看起来像
'~^(?=\P{Ll}*\p{Ll})(?=\P{Lu}*\p{Lu})(?:(?=(?:[^!@#$%^&*()]*[!@#$%^&*()]){2})|(?=(?:\D*\d){2})).{12,}$~u'
请参见regex demo。
前瞻匹配的位置紧随其后
(?:[^!@#$%^&*()]*[!@#$%^&*()]){2}
-除!@#$%^&*()
字符外的任何0+字符的两个重复,后跟!@#$%^&*()
列表中的一个字符|
-或(?=(?:\D*\d){2}
-两个重复的任意0+个非数字字符,后跟一个数字