^\S*(?=\S{8,})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*$
From the fine folks over at Zorched.
^
: anchored to beginning of string
\S*
: any set of characters
(?=\S{8,})
: of at least length 8
(?=\S*[a-z])
: containing at least one lowercase letter
(?=\S*[A-Z])
: and at least one uppercase letter
(?=\S*[\d])
: and at least one number
$
: anchored to the end of the string
To include special characters, just add (?=\S*[\W])
, which is non-word characters.