В настоящее время я пытаюсь написать небольшой код HTML/JavaScript, который будет анализировать поле пароля, чтобы убедиться, что он имеет обязательные символы при вводе. Здесь JSFiddle для визуальной ссылки.
Я хочу, чтобы, когда требуемый символ вводится в поле пароля, соответствующий текст становится зеленым. Но когда я печатаю в поле, текст остается красным. Кажется, я не могу найти то, что я сделал неправильно. Что-то не так с моим JavaScript?
И вот мой код в одном файле:
<!DOCTYPE html>
<html>
<head>
<title>hw5</title>
<style>
p {
color:red;
position:absolute;
left:250px;
top:95px;
text-align:right
}
</style>
</head>
<body>
<h1>HW5</h1>
<label for="username">Username:</label>
<input style="margin-left:2px" type="text" name="username" id="username" />
<br/>
<label for="password">Password:</label>
<input style="margin-left:6px" type="password" name="password" id="password" />
<br/>
<p id="lower">must have one lower</p>
<p style="top:115px" id="upper">must have one upper</p>
<p style="top:135px" id="number">must have one number</p>
<p style="top:155px" id="punct">must have one punct</p>
<script>
var pass = document.getElementById('password');
var upper = document.getElementById('upper');
var lower = document.getElementById('lower');
var number = document.getElementById('number');
var punct = document.getElementById('punct');
$(document).ready(function() {
$('#password').keyup(checkPassword);
});
function checkPassword() {
var pass = $('#password').val();
if (pass.search(/[A-Z]/)) {
upper.style.color = "green";
} else upper.style.color = "red";
if (pass.search(/[a-z]/)) {
lower.style.color = "green";
} else lower.style.color = "red";
if (pass.search(/\d/)) {
number.style.color = "green";
} else number.style.color = "red";
if (pass.search(/[!\@\#\$\%\^\&\*\(\)\_\+]/)) {
punct.style.color = "green";
} else punct.style.color = "red";
}
</script>
</body>
</html>
Функция поиска по Javascript возвращает позицию, а не TRUE или FALSE.
Это означает, что ваше сравнение терпит неудачу, когда символы найдены в позиции 0...
Также измените обработку событий, так как ваша не будет работать.
Это должно работать (не протестировав RegExp, хотя).
$(document).ready(function () {
$('#password').keyup(function() {
var pass = $('#password').val();
if (pass.search(/[A-Z]/) != -1) {
upper.style.color = "green";
} else upper.style.color = "red";
if (pass.search(/[a-z]/) != -1) {
lower.style.color = "green";
} else lower.style.color = "red";
if (pass.search(/\d/) != -1) {
number.style.color = "green";
} else number.style.color = "red";
if (pass.search(/[!\@\#\$\%\^\&\*\(\)\_\+]/) != -1) {
punct.style.color = "green";
} else punct.style.color = "red";
});
});
Кроме того, если вы хотите использовать более чистый код, вы можете использовать:
$(document).ready(function () {
$('#password').keyup(function() {
var pass = $('#password').val();
upper.style.color = (pass.search(/[A-Z]/) != -1) ? 'green' : 'red';
lower.style.color = (pass.search(/[a-z]/) != -1) ? 'green' : 'red';
number.style.color = (pass.search(/\d/) != -1) ? 'green' : 'red';
punct.style.color = (pass.search(/[!\@\#\$\%\^\&\*\(\)\_\+]/) != -1) ? 'green' : 'red';
});
});
Надеюсь это поможет.
checkPassword
выполняется.