/^(?=.*\d)(?=.*[a-zA-Z])[0-9a-zA-Z]{8,16}$/
Последняя часть вашего регулярного выражения, .{8,16}
, допускает любой символ с точкой.
Предварительный просмотр только гарантирует, что есть хотя бы одна цифра и одна буква - он не говоритчто-нибудь о других персонажах.Кроме того, обратите внимание, что я обновил вашу часть для сопоставления букв - вам не нужны два класса символов.
Запрещение специальных символов в пароле полностью противоречит интуиции.Почему ты это делаешь?