As respostas que usam padrão e regex gravam a senha do usuário nas propriedades de entrada como texto simples pattern='mypassword'
. Isso só ficará visível se as ferramentas do desenvolvedor estiverem abertas, mas ainda não parece uma boa ideia.
Outro problema com o uso de padrão para verificar uma correspondência é que você provavelmente desejará usar o padrão para verificar se a senha está no formato correto, por exemplo, letras e números mistos.
Também acho que esses métodos não funcionarão bem se o usuário alternar entre as entradas.
Esta é minha solução que usa um pouco mais de JavaScript, mas executa uma verificação de igualdade simples quando qualquer entrada é atualizada e, em seguida, define uma validade de HTML personalizado. Ambas as entradas ainda podem ser testadas para um padrão, como formato de e-mail ou complexidade de senha.
Para uma página real, você mudaria os tipos de entrada para 'senha'.
<form>
<input type="text" id="password1" oninput="setPasswordConfirmValidity();">
<input type="text" id="password2" oninput="setPasswordConfirmValidity();">
</form>
<script>
function setPasswordConfirmValidity(str) {
const password1 = document.getElementById('password1');
const password2 = document.getElementById('password2');
if (password1.value === password2.value) {
password2.setCustomValidity('');
} else {
password2.setCustomValidity('Passwords must match');
}
console.log('password2 customError ', document.getElementById('password2').validity.customError);
console.log('password2 validationMessage ', document.getElementById('password2').validationMessage);
}
</script>