2017-02-14 2 views
-2

Мне нужно включить проверку пароля на минимум 8 символов, включая специальный символ и хотя бы одну заглавную букву.Проверка пароля в javascript

Я попробовал этот сценарий как:

$(document).on('keyup', '.passworduser', function() { 
 
    var txtInput = $(this).val(); 
 
    var regPass = "^(?=.*?[0-9])(?=.*?[A-Z])(?=.*?[#[email protected]$%^&*-_]).{8,}$"; 
 
    var color = "Red"; 
 
    if (txtInput.length > 7) { 
 
    if (!txtInput.match(regPass)) { 
 
     $('#password_strength').html("Include a special character and at least one capital letter"); 
 
     $("#password_strength").css("color", color); 
 

 
    } else { 
 
     $('#password_strength').html(""); 
 

 
    } 
 
    } else { 
 
    $('#password_strength').html("Password to be a minimum of 8 characters"); 
 
    $("#password_strength").css("color", color); 
 

 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<input type="text" class="passworduser"> 
 
<div id="password_strength"></div>

Для некоторого выражения она работает, для кого-то это не так.

+1

* Для некоторых выражений это работает, для некоторых это не так. * => Вы могли бы прояснить? Кроме того, вы будете удивлены тем, что '[* -_]' do ... –

+0

@Thomas: включить подчеркивание и минус, если пользователь хочет добавить это thats y я использовал. – heema

+0

См. Ответ Тушара о семантике дефиса в классе char. См. [Demo] (https://regex101.com/r/VX08iT/1) –

ответ

1

regPassстрока. Он должен быть обернут вокруг обратных косых черт, чтобы создать регулярное выражение или передать строку в конструктор RegExp.

var regPass = /^(?=.*?[0-9])(?=.*?[A-Z])(?=.*?[#[email protected]$%^&*\-_]).{8,}$/; 

ИЛИ

var regPass = new RegExp("^(?=.*?[0-9])(?=.*?[A-Z])(?=.*?[#[email protected]$%^&*\\-_]).{8,}$"); 

Кроме того, - (дефис) в классе символов используется для выбора диапазона символов. Чтобы соответствовать этому буквально, убегите или переместите его в начало или конец класса персонажа.


Вот полный код с некоторыми изменениями

// Can be moved outside 
var regex = /^(?=.*?[0-9])(?=.*?[A-Z])(?=.*?[#[email protected]$%^&*\-_]).{8,}$/; 

$(document).on('keyup', '.passworduser', function() { 
    var value = $(this).val(); 
    var color = "Red"; 

    if (value.length > 7) { 
     // Use RegExp.test instead of String.match 
     if (regex.test(value)) { 
      // Method chaining 
      $('#password_strength').html("Include a special character and at least one capital letter") 
       .css("color", color); 
     } else { 
      $('#password_strength').html(""); 
     } 
    } else { 
     $('#password_strength').html("Password to be a minimum of 8 characters") 
      .css("color", color); 
    } 
}); 
+0

Он должен быть «новым RegExp («^(? =. *? [0-9]) (? =. *? [AZ]) (? =. *? [#?! @ $%^& * \\ -_]). {8,} $ "' –

+0

@ WiktorStribiżew Спасибо за указание. Я полностью пропустил это. – Tushar

0

Держите регулярное выражение просто. Легче отлаживать. Попробуйте это:

function testPassword(pw) { 
// for all special characters 
var reSpecial = /[#[email protected]$%^&*\-_\\\/]/; 
// for Capitals 
var reCap = /[A-Z]/; 

// just test both of them... 
return pw.match(reSpecial) != undefined && pw.match(reCap) != undefined; 
}; 

console.log(testPassword("asdf"));// false 
console.log(testPassword("asdf5"));//false 
console.log(testPassword("asdA"));//false 
console.log(testPassword("asdf%"));//false 
console.log(testPassword("asdfA%"));//true 


$(document).on('keyup', '.passworduser', function(){ 
    var color="Red"; 
    if(txtInput.length > 7){ 
    if(!testPassword(txtInput){ 
     $('#password_strength').html("Include a special character and at least one capital letter"); 
     $("#password_strength").css("color", color); 
    }else{ 
    $('#password_strength').html(""); 
    } 
    }else{ 
    $('#password_strength').html("Password to be a minimum of 8 characters");  
    $("#password_strength").css("color", color); 
    } 
}); 
0

Пожалуйста, попробуйте это, я обновил свой код, вот код ниже:

$(document).on('keyup', '.passworduser', function(){ 
    var txtInput = $(this).val(); 
    var color="Red"; 
    var uppercase = /[A-Z]/ ; 
    var lowercase = /[a-z]/ ; 
    var number = /[0-9]/ ; 
    var special = /[\W]{1,}/ ; 
    var pswd_length = txtInput.length < 8; 
    if(!uppercase.test(txtInput) || !lowercase.test(txtInput) || !number.test(txtInput) || !special.test(txtInput) || pswd_length) { 
     $('#password_strength').html('Password must be at least 8 characters. Password must contain at least one upper case letter, one lower case letter and one digit.'); 
     $("#password_strength").css("color", color); 
     //return false; 
    } 
    else { 
     $('#password_strength').html(""); 
    } 

}); 

Я надеюсь, что это может быть полезным для вас.

Смежные вопросы