I want to validate a string to meet the following conditions:
You can use a (?!0+$) negative lookahead to avoid matching a string that only contains 1 or more zeros:
/^(?!0+$)[A-Z0-9][0-9]{5}$/
^^^^^^^
See the regex demo. This approach lets you just copy/paste the lookahead after ^ and not worry about how many chars the consuming part matches.
Details
^ - start of a string(?!0+$) - a negative lookahead that fails the match if there are 1 or more 0 chars up to the end of the string ($)[A-Z0-9] - an uppercase ASCII letter or a digit[0-9]{5} - five digits$ - end of string.Just have a negative lookahead like this to disallow all 0s:
/^(?!0{6})[A-Z0-9][0-9]{5}$/
(?!000000)[A-Z0-9][0-9]{5} if lookahead is okay.
I think this will do it. It checks for not 000000 and your original regex.
(?!0{6})^[A-Z0-9][0-9]{5}$
What if you checked for the all zeros case first and then, after determining that it's no all zeros apply your regex?
if ( NOT ALL ZEROS)
APPLY REGEX
I would do two passes. One with your first regex, and one with a new regex looking for all zeros.