@Xarviel: Podpowiedź fajna, ale trochę niepoprawna, a w porywach niebezpieczna.
Niepoprawna - bo jeżeli np. name będzie "^Tomasz" i hasło "^tom" to nam zwyczajnie nie zadziała - stwierdzi, że hasło jest w porządku.
Niepoprawna - bo jeżeli będzie tam (Tomasz
i (tom
to wyrzuci wyjątek i kod się w ogóle nie wykona
Niebezpieczna - bo jeżeli ten sam kod użylibyśmy w Node.JS to właśnie zrobiliśmy sobie dziurę ReDoS
Trzeba tam zdecydowanie dorzucić zabezpieczenie przed wrzucaniem w środek wyrażenia regularnego znaków specjalnych. Wydaje mi się, że ta odpowiedź przeczytana i zrozumiana w całości powinna dać nam odpowiedź jak zrobić to poprawnie - aczkolwiek nie zagłębiałem się w to aż tak i osobiście nie lubię wstrzykiwania czegokolwiek w RegExpy - co chwila muszę aktualizować npmowe paczki w moich projektach, bo co chwila jest w jakiejś właśnie ReDoS, a w najgorszych przypadkach aktualizuję tą samą paczkę kilka dni z rzędu, bo co chwile jest poprawiana i wychodzi nowy problem - co sugeruje mi, że jest tu dużo potencjalnych problemów i rozwiązanie ze Stacka również może być niepełne.
Także wracając do problemu - ja bym raczej poszedł drogą: oba stringi toLowerCase(), pociąć taki name
na kawałki i sprawdzać czy któryś kawałek nie znajduje się w haśle. Ogółem dość upierdliwa UXowo sprawa, bo login Tomek
i hasło TomekMaNajbe55pieCzniej$heHa$loNASWIEcie!!!66
jest całkiem dobrą parą :) Ale to tak w ramach rozważań poza tematem. Czas na przykład:
const name = '(Tomasz';
const password = '(tOm123!qwerty';
const fragments = name.toLowerCase().match(/.{3}/g);
const lowerPassword = password.toLowerCase();
const loginIncluded = fragments.some(fragment => lowerPassword.includes(fragment));
if (loginIncluded) {
console.log("Hasło zawiera fragment loginu")
}
else {
console.log("Hasło nie zawiera fragmentu loginu")
}