It might be better to evaluate the rules separately to provide feedback to user as to which rule failed to validate.
I suggest doing something like this instead: https://jsfiddle.net/hejecr9d/
// will store list of rules
var rules = []
// at least one capital letter rule
rules.one_capital_letter = {
fail_message: 'password needs at least one capital letter',
validate: function(password){
return /[A-Z]/.test(password)
}
}
// at least six letters rule
rules.at_least_six_letters = {
fail_message: 'password needs to have at least 6 characters',
validate: function(password){
return password.length >= 6
}
}
function validate_password(password) {
// goes through all the rules
for(rule in rules) {
if(!rules[rule].validate(password)) {
return {success: false, message: rules[rule].fail_message}
}
}
// return success after all rules are checked
return {success: true, message: 'password validated successfully'}
}
// Test if it works
var test_strings = ['abcd', 'Abcd', 'Abcdef']
for(i in test_strings) {
$('body').append(test_strings[i] + ': ' + validate_password(test_strings[i]).message + '<br>')
}