Подтвердить что ты не робот

Проверка пароля регулярного выражения Javascript со специальными символами

Я пытаюсь проверить пароль, используя регулярное выражение. Пароль обновляется, если у нас есть все символы в виде алфавитов. Где я иду не так? правильное выражение?

function validatePassword() {
    var newPassword = document.getElementById('changePasswordForm').newPassword.value;
    var minNumberofChars = 6;
    var maxNumberofChars = 16;
    var regularExpression  = /^[[email protected]#$%^&*]{6,16}$/;
    alert(newPassword); 
    if(newPassword.length < minNumberofChars || newPassword.length > maxNumberofChars){
        return false;
    }
    if(!regularExpression.test(newPassword)) {
        alert("password should contain atleast one number and one special character");
        return false;
    }
}
4b9b3361

Ответ 1

Используйте положительные lookahead утверждения:

var regularExpression = /^(?=.*[0-9])(?=.*[[email protected]#$%^&*])[[email protected]#$%^&*]{6,16}$/;

Без него ваше текущее регулярное выражение соответствует только тому, что у вас есть 6-16 действительных символов, оно не подтверждает, что у него есть хотя бы номер и, по крайней мере, специальный символ. Это то, для чего предназначен взгляд.

  • (?=.*[0-9]) - утверждать, что строка содержит как минимум одно число;
  • (?=.*[[email protected]#$%^&*]) - Утверждение строки имеет хотя бы один специальный символ.

Ответ 2

function validatePassword() {
    var p = document.getElementById('newPassword').value,
        errors = [];
    if (p.length < 8) {
        errors.push("Your password must be at least 8 characters"); 
    }
    if (p.search(/[a-z]/i) < 0) {
        errors.push("Your password must contain at least one letter.");
    }
    if (p.search(/[0-9]/) < 0) {
        errors.push("Your password must contain at least one digit."); 
    }
    if (errors.length > 0) {
        alert(errors.join("\n"));
        return false;
    }
    return true;
}

В нижнем ответе есть определенная проблема, так как она не проверяет целую строку из-за отсутствия [] при проверке символов и цифр, это правильная версия

Ответ 3

вы можете создать собственное регулярное выражение для проверки javascript

    /^            : Start
    (?=.{8,})        : Length
    (?=.*[a-zA-Z])   : Letters
    (?=.*\d)         : Digits
    (?=.*[!#$%&? "]) : Special characters
    $/              : End



        (/^
        (?=.*\d)                //should contain at least one digit
        (?=.*[a-z])             //should contain at least one lower case
        (?=.*[A-Z])             //should contain at least one upper case
        [a-zA-Z0-9]{8,}         //should contain at least 8 from the mentioned characters

        $/)

Example:-   /^(?=.*\d)(?=.*[a-zA-Z])[a-zA-Z0-9]{7,}$/

Ответ 4

Не пытайтесь делать слишком много за один шаг. Держите каждое правило отдельно.

function validatePassword() {
    var p = document.getElementById('newPassword').value,
        errors = [];
    if (p.length < 8) {
        errors.push("Your password must be at least 8 characters");
    }
    if (p.search(/[a-z]/i) < 0) {
        errors.push("Your password must contain at least one letter."); 
    }
    if (p.search(/[0-9]/) < 0) {
        errors.push("Your password must contain at least one digit.");
    }
    if (errors.length > 0) {
        alert(errors.join("\n"));
        return false;
    }
    return true;
}

Ответ 5

Я использую следующий script для минимального 8-буквенного пароля, с хотя бы символом, строчными буквами и строчными буквами и числом

function checkPassword(str)
{
    var re = /^(?=.*\d)(?=.*[[email protected]#$%^&*])(?=.*[a-z])(?=.*[A-Z]).{8,}$/;
    return re.test(str);
}

Ответ 6

Если вы проверите длину отдельно, вы можете сделать следующее:

var regularExpression  = /^[a-zA-Z]$/;

if (regularExpression.test(newPassword)) {
    alert("password should contain atleast one number and one special character");
    return false;
}