【发布时间】:2016-04-11 12:13:43
【问题描述】:
我需要正则表达式来检查字符串是否至少有 3 个大写字母、3 个小写字母和至少一个特殊字符。
目前我有这个:
^(?=.*[a-z]{3,})(?=.*[A-Z]{3,})(?=.*\d)(?=.*(_|[^\w])).+$
但它只有在角色彼此相邻时才有效。
应该匹配的示例:
S4L4S6na#a
【问题讨论】:
标签: regex
我需要正则表达式来检查字符串是否至少有 3 个大写字母、3 个小写字母和至少一个特殊字符。
目前我有这个:
^(?=.*[a-z]{3,})(?=.*[A-Z]{3,})(?=.*\d)(?=.*(_|[^\w])).+$
但它只有在角色彼此相邻时才有效。
应该匹配的示例:
S4L4S6na#a
【问题讨论】:
标签: regex
这会起作用
(?=(.*[A-Z]){3})(?=(.*[a-z]){3})(?=.*(_|[^\w]))
如果你还想包含数字
(?=.*\d)(?=(.*[A-Z]){3})(?=(.*[a-z]){3})(?=.*(_|[^\w]))
根据 cmets 进一步优化
您可以使用non-greedy 方法,它优化了上述regex 并使用[\W_] 而不是(_|[^\w])
(?=(.*?[A-Z]){3})(?=(.*?[a-z]){3})(?=.*?[\W_])
【讨论】:
.* non-greedy,你会得到更好的性能。 IE。 .*?。 (可能不是问题,但是... ;)
? 使其从 776 步下降到 353 步。然后附加 .+ 使其下降到 135 步。
(_|[^\w]) > [\W_]