Оценка текстового поля во время ввода

0

В настоящее время я пытаюсь написать небольшой код 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>
  • 0
    @cookiemonster извини, понял, что я пропустил основную часть. Я редактировал это в.
  • 1
    @ bjb568: в ОП уже есть скрипка. Я не думаю, что функция checkPassword выполняется.
Показать ещё 6 комментариев
Теги:

1 ответ

1
Лучший ответ

Функция поиска по 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';

        });
    });

JSFiddle

Надеюсь это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню