^(?=.*d)(?=.*[a-z])(?=.*[()[]{}?!$%&/=*+~,.;:<>-_])(?=.*[A-Z]).{9,}?$
# ] needs to be escaped ----^^ ^ ^
# otherwise it will close the character class | |
# [ too but for no logical reason | |
# the - is used to define a character range ----+ |
# the range >-_ gives >?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_ |
# there's no reason to make this quantifier non-greedy -------------+
Существует несколько ошибок:
^
Кроме того, якоря $
и $
неявные, вам не нужно их ставить.
Обратите внимание, что используя диапазоны, вы также можете написать шаблон следующим образом:
pattern="(?=.*d)(?=.*[a-z])(?=.*[!$%&(-/:-?_{}~])(?=.*[A-Z]).{9,}"