不知道如何像往常一样表达这个问题。
我一直在研究这个密码验证一段时间(之前的几个问题),而且我越来越接近了。
我有一个显示密码规则的 html 列表:
<form id="form-password-change" method="post" action="/notrelevantrightnow">
<div class="control-group">
<label class="control-label" for="input-username">{{label_username}}</label>
<div class="controls">
<input type="text" id="input-username" name="username" class="required" value="{{username}}" autocomplete="off">
</div>
</div>
<div id="password-info">
<ul>
<li id="length" class="invalid">Password must be 8 characters</li>
<li id="letter" class="invalid">Password must contain 3 letters</li>
</ul>
</div>
<div class="control-group">
<label class="control-label" for="input-password">{{label_new_password}}</label>
<div class="controls field">
<input type="password" id="input-password" name="password" placeholder="{{label_password}}" autocomplete="off">
</div>
</div>
<button type="submit" class="btn btn-large btn-wide btn-primary">Send Request</button>
</form>
我为每个规则添加了一个“有效”类(
但是,我还需要一个变量仅在多个 if 条件为真时才设置为真。示例:如果密码长度超过 7 个字符且至少包含 3 个字母,则 var pwdValid = true。
事实上,我必须在 else 条件上设置 pwdValid = false (我没想到我会这样做),然后一旦我添加另一个“if”验证,一旦它验证了之前的条件就被遗忘了!因此,如果您键入 3 个字母并提交,控制台会显示它是有效的,尽管没有满足其他条件(最少 8 个字符)。
这是我的 JS:
$(function(){
var pwdInput = $('#form-password-change #input-password');
var pwdValid = false;
function validatePwdStrength(){
var pwdValue = $(pwdInput).val(); // This works because when it's called it's called from the pwdInput, see end
// Validate the length
if (pwdValue.length > 7) {
$('#form-password-change #length').removeClass('invalid').addClass('valid');
pwdValid = true;
} else {
$('#form-password-change #length').removeClass('valid').addClass('invalid');
pwdValid = false; // Had to add this in or it remains true if it passes the if case and then you change the field so it fails.
}
// RegExp
// Validate number of letters letters
if ( /([^a-z]*[a-z]){3,}/i.test(pwdValue) ) {
$('#letter').removeClass('invalid').addClass('valid');
pwdValid = true; // As soon as I add this one, my previous if cases are forgotten.
} else {
$('#letter').removeClass('valid').addClass('invalid');
pwdValid = false;
}
};
function validatePwdValid(){
if (pwdValid == true) {
event.preventDefault();
console.log('Password Validated');
}
else {
event.preventDefault();
console.log('Password Failed');
}
};
pwdInput.bind('change keyup input', validatePwdStrength); // Keyup is a bit unpredictable
$('#form-password-change').submit(validatePwdValid);
});
如果我不尽快解决这个问题,我可能会爆炸。