我正在尝试为包含 1 个大写字母和 2 个小写字母、2 个数字和 2 个非字母数字字符的字符串创建一个正则表达式,现在我有:
(?=.*\d{2})(?=.*[a-z]{2})(?=.*[A-Z])(?=.*\W{2})
问题是这个正则表达式中的字符必须更严格,而我不需要。
我需要接受的解决方案:
Taa12@!
T1a1b@!
a1!b@2A
答案 0 :(得分:1)
你可以使用
^(?=(?:\D*\d){2})(?=(?:[^a-z]*[a-z]){2})(?=[^A-Z]*[A-Z])(?=(?:\w*\W){2})
参见regex demo。
详情:
^
- 字符串的开始(?=(?:\D*\d){2})
- 至少两位字符(不一定是连续的)(?=(?:[^a-z]*[a-z]){2})
- 至少两个小写 ASCII 字母(不一定是连续的)(?=[^A-Z]*[A-Z])
- 至少一个 ASCII 字母(?=(?:\w*\W){2})
- 至少两个非单词字符(不一定是连续的)