PowerShell: 119 === **Gofled Code** for(;!($x-cmatch'.*(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!-/:-@[-`{-~]).*')){$x='';1..15|%{$x+=[char](33..126|random)}}$x **Un-golfed and Commented** # Start for loop definition. for( # Skip variable initialization, start definition of run condition. ; # Loop runs if $x does not meet complexity requirements. # Length requirement is not tested here because it is enforced by the generator later. # Much thanks to @VasiliSyrakis for the RegEx help. !($x-cmatch'.*(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!-/:-@[-`{-~]).*') ) { # Reset $x in case the script block has already run. $x=''; # Use ForEach-Object, via the % alias, to run a loop 15 times. 1..15|%{ # Append a random ASCII character from 33-126 to $x. # Note: Use get-random instead of random for faster performance. $x+=[char](33..126|random) } } # Display $x. $x # Variable cleanup - not included in golfed code. rv x