У меня была похожая проблема, и для ее решения с помощью API-интерфейса HTML5 я сделал это: установил шаблон для пароля, который должен содержать не менее восьми букв и цифр. Затем, чтобы привести их в соответствие, я сделал:
var password = document.querySelector('#password'),
passwordConfirm = document.querySelector('#password_confirm');
[].forEach.call([password, passwordConfirm], function(el) {
el.addEventListener('input', function() {
if (!el.validity.patternMismatch) {
if ( password.value === passwordConfirm.value ) {
try{password.setCustomValidity('')}catch(e){}
} else {
password.setCustomValidity("Password and password confirm doesn\'t match")
}
}
}, false)
});
где с el.validity.patternMismatch
сначала проверьте правильность шаблона, а затем проверьте правильность двух.
Вот мой пароль для ввода с шаблоном.
<input type="password" pattern="^((?=.*(\d|\W))(?=.*[a-zA-Z]).{8,})$" id="password" />