Sprawdzanie wielkości litery i znaków specjalnych w haśle

0

Witam robię skrypt który sprawdza czy hasło jest dobre zrobiłem do tego momentu czy ma cyfrę, jak bardzo jest długi jednak nie mam pomysłu jak zrobić to z duża literą i znakami specjalnymi. Wiem że o wiele prościej by było z wyrażeniami regularnymi ale nie mogę ich tutaj wykorzystać.
Wstawiam swój kod

function check() {
    var password = document.getElementById("pass").value;
    if (password == "") {
        document.getElementById("wynik").innerHTML = "Wpisz hasło!";
    } else if (password.length <= 7) {
        document.getElementById("wynik").innerHTML = "Twoje hasło jest za krótkie!";
    } else if (cyfra(password) == false) {
        document.getElementById("wynik").innerHTML = "Twoje hasło nie ma liter!";
    }
}

function cyfra(password) {
    var tab = password.split("");

    var dlugoscTab = tab.length;
    var sprawdzCyfre = false;
    var literki;
    for (var i = 0; i < dlugoscTab; i++) {
        literki = tab[i];

        if (isNaN(literki) == false) {
            sprawdzCyfre = true;
        }
    }
    return sprawdzCyfre;
}
1

charCodeAt(), i np od 65 do 90 masz wielkie litery

1

funkcja zwraca true jak w słownie będzie chociaż jedna wielka litera

function hasCapitalLetter(word) {
  for(var i = 0; i < word.length; i++) {
    if (word[i].charCodeAt() > 64 && word[i].charCodeAt() < 91) {
      return true;
    }
  }
return false;
}
1

Jeśli interesuje Cię tylko sprawdzenie istnienia wymaganych znaków, ale nie ma znaczenia ilość tych znaków, to można prościej:

function hasCapitalLetter(input) {
    return typeof(input) === "string" && input.split("").some((x) => x >= "A" && x <= "Z");
}

function hasDigit(input) {
    return typeof(input) === "string" && input.split("").some((x) => x >= "0" && x <= "9");
}
1
Burmistrz napisał(a):

to można prościej:

Krócej na pewno, ale czy prościej?

0

Według mnie prościej, ale może tak mi się wydaje, bo jestem przyzwyczajony do wyrażeń lambda w C#.

Warto byłoby też sprawdzić, czy argument funkcji jest skonstruowany przez funkcję String, bo w takim przypadku typeof zwraca "object":

function hasDigit(input) {
    if (typeof(input) !== "string" && !(input instanceof String))
    {
        return false;
    }

    return input.split("").some(x => x >= "0" && x <= "9");
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1