tl;dnr answer:
/^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/
Explanation:
A common way to express "AND" conditions in regular expressions is like the following:
/
^
(?= pattern 1)
(?= pattern 2)
(?= pattern 3)
etc
/
Basically, we accept the start of input (^) only if the rest matches all given patterns. Otherwise, the whole expression fails.
In your example, the pattern 1 is to match everything, including "special characters". From your comment, you're looking for the printable ASCII range. An ASCII char is [!-~] and since we don't want anything else (like "international chars") and don't allow empty strings, the final pattern is:
[!-~]+$
The second pattern is "at least one alphanumeric", which can be rephrased as "any amount of anything else, then one digit or letter", that is,
.*[A-Za-z0-9]
Putting it all together:
/^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/
Some testing:
re = /^(?=[!-~]+$)(?=.*[a-zA-Z0-9])/
console.log(re.test("hi")) // true
console.log(re.test("a!!@#$*()_")) // true
console.log(re.test("~!!@#$*()_")) // false
console.log(re.test("π+1")) // false
console.log(re.test("")) // false
Seems to work!
[a-zA-Z][a-zA-Z0-9]+.π"special"?