2016-04-11 87 views
1

我需要正則表達式來檢查字符串是否至少有3個大寫字母,3個小寫字母和至少一個特殊字符。正則表達式與大寫和小寫3

目前我有這樣的:

^(?=.*[a-z]{3,})(?=.*[A-Z]{3,})(?=.*\d)(?=.*(_|[^\w])).+$ 

但如果字符旁邊的海誓山盟它纔會起作用。

它應該配什麼

例子:

S4L4S6na#a 

回答

3

這將工作

(?=(.*[A-Z]){3})(?=(.*[a-z]){3})(?=.*(_|[^\w])) 

如果您還想包括數字

(?=.*\d)(?=(.*[A-Z]){3})(?=(.*[a-z]){3})(?=.*(_|[^\w])) 

Regex Demo

進一步優化按照意見

您可以使用non-greedy方法,優化了上述regex和使用[\W_]代替(_|[^\w])

(?=(.*?[A-Z]){3})(?=(.*?[a-z]){3})(?=.*?[\W_]) 

Reason for alternation being slower than character class

+2

我** **想你如果你使''*'*非貪婪* *會得到更好的表現。即'。*?'。 (可能不是問題,但...;) – ClasG

+0

@ClasG是的..這可以很好..稍後更新 – rock321987

+0

謝謝,這個工程。 – user3482304