czy hasło zaczyna się dużą literą, czy ma jakąś liczbę oraz czy ma długość od 8 do 16 cyfr
Nie sprawdzasz takich warunków :)
Zobacz:
const reg = /^[A-Z][a-zA-Z0-9]{7,15}$/;
reg.test('Tomek123'); //true zgodnie z oczekiwaniami
reg.test('TomekXXX'); //true mimo, że nie mam żadnej cyfry!
Na szybko można by dodać:
const reg = /^(?=.*\d)[A-Z][a-zA-Z0-9]{7,15}$/;
reg.test('Tomek123'); //true warunki spełnione
reg.test('TomekXXX'); //false bo brak cyfry
reg.test('tomek123'); //false bo nie zaczynamy od wielkiej litery
Ale pytanie dlaczego narzucasz, że hasło musi zaczynać się wielką literą? Moim zdaniem lepiej dać np. warunek wystąpienia obowiązkowo jednej wielkiej litery, jednej cyfry i dowolnych znaków z założonego zakresu, przy czym całe hasło ma mieć od 8 do 16 znaków. Nie określałbym jednak położenia tej wielkiej litery czy cyfry, niech to już user sam zrobi, tym bardziej, że może mieć jakieś swoje ulubione hasło spełniające te kryteria a obowiązek rozpoczęcia wielką literą może to zaburzyć, zupełnie niepotrzebnie.