是的,这是可能的。
您使用的正则表达式引擎必须支持条件(?(cond)yes|no)
话虽如此,如果您使用任何其他字符,则使用点 .。
^(?=.{8})(?:.*?(?:(?(1)(?!))([A-Z])|(?(2)(?!))([a-z])|(?(3)(?!))([0-9])|(?(4)(?!))([!"#$%&'()*+,\-./:;<=>?@[\]^_`{|}~]))){3,4}.*$
https://regex101.com/r/Iyj5hJ/1
展开
^ # BOS
(?= .{8} ) # At least 8 chars
(?: # Require 3 out of the 4 types
.*?
(?:
(?(1)
(?!)
)
( [A-Z] ) # (1), Upper
|
(?(2)
(?!)
)
( [a-z] ) # (2), Lower
|
(?(3)
(?!)
)
( [0-9] ) # (3), Digit
|
(?(4)
(?!)
)
( [!"#$%&'()*+,\-./:;<=>?@[\]^_`{|}~] ) # (4), Special
)
){3,4}
.*
$ # EOS
如果您只想在 ascii 范围内允许非空白,请使用此
^(?=.{8})(?:[a-zA-Z0-9!"#$%&'()*+,\-./:;<=>?@[\]^_`{|}~]*?(?:(?(1)(?!))([A-Z])|(?(2)(?!))([a-z])|(?(3)(?!))([0-9])|(?(4)(?!))([!"#$%&'()*+,\-./:;<=>?@[\]^_`{|}~]))){3,4}[a-zA-Z0-9!"#$%&'()*+,\-./:;<=>?@[\]^_`{|}~]*$
展开
^ # BOS
(?= .{8} ) # At least 8 chars
(?: # Require 3 out of the 4 types
[a-zA-Z0-9!"#$%&'()*+,\-./:;<=>?@[\]^_`{|}~]*?
(?:
(?(1)
(?!)
)
( [A-Z] ) # (1), Upper
|
(?(2)
(?!)
)
( [a-z] ) # (2), Lower
|
(?(3)
(?!)
)
( [0-9] ) # (3), Digit
|
(?(4)
(?!)
)
( [!"#$%&'()*+,\-./:;<=>?@[\]^_`{|}~] ) # (4), Special
)
){3,4}
[a-zA-Z0-9!"#$%&'()*+,\-./:;<=>?@[\]^_`{|}~]*
$