Вам необходимо внести небольшое исправление в свое регулярное выражение и определить все разрешенные символы вместе в одном таком, как это,
(?=.*[0-9])(?=.*[a-z])[a-z0-9!@#$%^&*]*$
В своем регулярном выражении у вас есть это,
([a-z0-9]+)[!@#$%^&*]*
, котороеозначает, что в вашей входной строке алфавитно-цифровые символы должны стоять на первом месте, а специальные символы - на последнем, и именно поэтому он не работает.