#javascript
Вопрос:
я пытаюсь проверить поле пароля со следующими условиями, если требования выполнены, поле пароля должно изменить свой цвет на зеленый, если нет, должно быть красным: один символ нижнего регистра, один символ верхнего регистра, один номер, один специальный символ, минимум восемь символов.Я пытался использовать регулярное выражение, но каким-то образом оно становится красным, даже если я ввожу пароль со всеми требованиями. Есть идеи?
let passwordField = document.getElementById("password");
passwordField.addEventListener("focusout", () => {
let checkPass =
/^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[@$!%*?amp;])[A-Za-zd@$!%*?amp;]{8,}$/;
if (checkPass.test(password.value)) {
passwordField.style.backgroundColor = "green";
console.log("green");
} else {
passwordField.style.backgroundColor = "red";
console.log("red");
}
});
Комментарии:
1. Вы уверены, что хотите использовать регулярное выражение?
2. было бы лучше с регулярным выражением
Ответ №1:
Регулярное выражение должно быть:
^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^amp;*])(?=.{8,})
Где:
- нижний символ =
(?=.*[a-z])
- верхний шар =
(?=.*[A-Z])
- 1 число =
(?=.*[0-9])
- специальный символ =
(?=.*[!@#$%^amp;*])
- минимальная длина до 8 =
(?=.{8,})
let passwordField = document.getElementById("password");
passwordField.addEventListener("focusout", () => {
let checkPass =
new RegExp("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^amp;*])(?=.{8,})");
if (checkPass.test(password.value)) {
passwordField.style.backgroundColor = "green";
console.log("green");
} else {
passwordField.style.backgroundColor = "red";
console.log("red");
}
});
<input id="password" />
И в результате получается:
Комментарии:
1. все еще делает его красным
2. @EljanoHita проверьте изображение в моем ответе
3. @EljanoHita с каким паролем вы пытаетесь?
4. это должно быть что-то еще, чего мне не хватает в моем коде, потому что запуск кода snnipet работает нормально
5. Без проблем. Приятного кодирования =)
Ответ №2:
Пожалуйста, проверьте это, это точно то же самое, что вы хотите
let passwordField = document.getElementById("password");
passwordField.addEventListener("focusout", () => {
var decimal= /^(?=.*d)(?=.*[!@#$%^amp;*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
if (passwordField.value.match(decimal)) {
passwordField.style.backgroundColor = "green";
console.log("green");
} else {
passwordField.style.backgroundColor = "red";
console.log("red");
}
});
<!DOCTYPE html>
<html lang="en">
<head>
<title>Password</title>
</head>
<body>
<h1>This is a password validation</h1>
<input id="password" />
</body>
</html>