Las respuestas que usan patrón y una expresión regular escriben la contraseña del usuario en las propiedades de entrada como texto sin formato pattern='mypassword'
. Esto solo será visible si las herramientas de desarrollo están abiertas, pero aún así no parece una buena idea.
Otro problema con el uso de patrón para verificar una coincidencia es que probablemente desee usar patrón para verificar que la contraseña tiene la forma correcta, por ejemplo, letras y números mezclados.
También creo que estos métodos no funcionarán bien si el usuario cambia entre entradas.
Aquí está mi solución que usa un poco más de JavaScript pero realiza una simple verificación de igualdad cuando se actualiza cualquiera de las entradas y luego establece una validez HTML personalizada. Ambas entradas aún se pueden probar para un patrón como el formato de correo electrónico o la complejidad de la contraseña.
Para una página real, cambiaría los tipos de entrada a 'contraseña'.
<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>