/\w{6}/.test(password)
Нет, это не
At least six characters long
Это просто шесть символов подряд, до и после них может быть что угодно, в том числе и не требуемые alphanumeric. Поэтому: надо указать, что проверяется вся строка целиком (
^
- начало строки,
$
- конец); символов может быть больше шести (квантификатор
{}
позволяет указывать диапазон значений, верхнюю границу оставляем открытой). Т.е., правильно будет так:
/^\w{6,}$/.test(password)
UPD.
\w
- не alphanumeric, это ещё и
_
, так что придётся перечислить нужные символы в более явном виде. Кроме того, вместо четырёх отдельных выражений можно сделать одно:
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{6,}$/.test(password)