Это потому, что ваш позитивный взгляд требует, чтобы оба a [0-9]
присутствовали и a [a-zA-Z]
присутствовали.
Попробуйте уменьшить это до одногопрогноз, который просто указывает, что присутствует хотя бы один из [0-9]
и [a-zA-Z]
:
matches: /^(?=.*[0-9a-zA-Z])[0-9a-zA-Z_\[\]\\\^\$\.\|\?\*\+\(\)~!@#%&-=]{8,}$/
Кроме того, вы можете повысить эффективность регулярного выражения, изменив .*
в вашем заголовке будет [^0-9a-zA-Z]*
: таким образом, заголовок будет совпадать с первым алфавитно-цифровым номером, который он найдет, а затем остановится, предотвращая ненужное сканирование:
matches: /^(?=[^0-9a-zA-Z]*[0-9a-zA-Z])[0-9a-zA-Z_\[\]\\\^\$\.\|\?\*\+\(\)~!@#%&-=]{8,}$/