/^.*(?=.{10,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*$/ #### /^(?=.{10})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#\$%^&+=])/s #### /.{10}/s && /\d/ && /[a-z]/ && /[A-Z]/ && /[@#\$%^&+=]/ #### lenght() >= 10 && /\d/&&1 + /[a-z]/&&1 + /[A-Z]/&&1 + /[@#\$%^&+=]/&&1 == 4 or die; #### use List::Util qw( sum ); lenght() >= 10 && sum( /\d/, /[a-z]/, /[A-Z]/, /[@#\$%^&+=]/ ) == 4 or die; #### m{ (?{ 0 }) ^ (?> (?=.{10}) (?=.* \d (?{ $^R+1 }) | ) (?=.* [a-z] (?{ $^R+1 }) | ) (?=.* [A-Z] (?{ $^R+1 }) | ) (?=.* [@#\$%^&+=] (?{ $^R+1 }) | ) ) (?(?{ $^R != 3 })(?!)) }xs or die;