document.getElementById("too_short").value
document.getElementById("without_lowercase").value
document.getElementById("without_uppercase").value
document.getElementById("without_digits").value
document.getElementById("without_special_chars").value
odwołujesz się do elementu <p>
<p class="errors" id="too_short"> </p>
<p class="errors" id="without_lowercase"> </p>
<p class="errors" id="without_uppercase"> </p>
<p class="errors" id="without_digits"> </p>
<p class="errors" id="without_special_chars"> </p>
który nie zawiera atrybutu value, czyli powinno być raczej
const tooShortError = document.getElementById("too_short");
const withoutLowercaseError = document.getElementById("without_lowercase");
// itd.
propozycja zmian z użyciem tablicy dla "errors"
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Hasłosprawdzacz</title>
<meta name="description" content="Sprawdzacz poprawności hasła.">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<link rel="stylesheet" href="style.css">
</head>
<body>
<form style="max-width: 200px; width: 100%; margin: auto; text-align: center;">
<div>
<label for="password">Hasło</legend>
<input type="password" id="password" onkeyup="validatePassword()">
</div>
<p class="errors" id="check-password"></p>
<div>
<label for="password-repeated">Powtórz hasło</legend>
<input type="password" id="password-repeated">
</div>
<p class="errors" id="check-password-repeated"></p>
</form>
<script src="script.js"></script>
</body>
</html>
/* dodatkowy css */
.errors {
font-family: Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace;
margin: 1em 0;
color: red;
font: 300 0.75em/1.1 monospace;
}
function validatePassword() {
const password_value = (document.getElementById('password').value).trim(),
check_password = document.querySelector('#check-password');
const errors = [];
if (password_value.length < 8)
errors.push('Hasło jest za krótkie! Musi zawierać min. 8 znaków.');
if (!/[a-z]/.test(password_value))
errors.push('Hasło musi zawierać min. jedną małą literę.');
if (!/[A-Z]/.test(password_value))
errors.push('Hasło musi zawierać min. jedną wielką literę.');
if (!/[0-9]/.test(password_value))
errors.push('Hasło musi zawierać min. jedną cyfrę.');
if (!/[!#$%&?_"]/.test(password_value))
errors.push('Hasło musi zawierać min. jednen znak specjalny.');
if (errors)
check_password.innerHTML = errors.join('<br>');
}