in reply to New to RegEx... need translation

In several regexps it could be

if (/[A-Z]/ and /[a-z]/ and /[0-9]/ and /[;,.#!\$]/) { ...
as just one regexp you could use
if (/(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[;,.#!\$])/) { ...
I would recomend the first code though.

Update: Another option without using the positive look-aheads would be:
if (not /^[^A-Z]*$|^[^a-z]*$|^[^0-9]*$|^[^;,.#!\$]*$/) { ...
If you want to know how did I get to that code:
/[A-Z]/ and /[a-z]/ and /[0-9]/ and /[;,.#!\$]/ is the same as ( using (A and B) == not (not A or not B) ) not( !/[A-Z]/ or !/[a-z]/ or !/[0-9]/ or !/[;,.#!\$]/ is the same as not( /^[^A-Z]*$/ or /^[^a-z]*$/ or /^[^0-9]*$/ or /^[^;,.#!\$]*$/) is the same as not( /^[^A-Z]*$|^[^a-z]*$|^[^0-9]*$|^[^;,.#!\$]*$/)
You can read the regexp as "the string is either all non-capitals or all non-lowercase leters or non-digits or non-specials".
This is so ugly it's almost beautiful. On the other hand I would use neither in production code. It's better to stick to multiple regexps as dws suggests.

Jenda
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live.
   -- Rick Osborne

Edit by castaway: Closed small tag in signature