Это регулярное выражение говорит: "сопоставьте все, что не является одной из этих цифр".4 не является одной из этих цифр, поэтому строка соответствует.Если вы хотите, чтобы он сказал «соответствует любому, что не содержит ни одной из этих цифр», вы хотите проверить, что каждый символ соответствует этому шаблону от начала до конца:
/^[^01235689]*$/.test(+n);
(что означает «соответствовать любому, чтоначинается с любого количества символов, не входящих в этот набор, а затем заканчивается ничем другим ".)