正则表达式2数字或特殊字符

时间:2019-02-21 09:41:52

标签: regex

所以我正在尝试创建一个执行以下操作的正则表达式:

最少12个字符,需要大写,需要小写,需要2个数字值或2个特殊字符。

目前,我有以下内容:

org.apache.jmeter.util.JMeterUtils.setProperty("threads", "10");

使用1个数字或1个特殊字符,而不是2个。我尝试将{2}添加到OR条件中,但是,这需要两个不正确的组合。

任何帮助将不胜感激。

1 个答案:

答案 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+个非数字字符,后跟一个数字