Tengo un campo de entrada llamado exampleInput . Quiero que el usuario solo pueda escribir estos dos:
var pattern = /[A-Za-z][0-9]{7}[A-Za-z0-9]/; var pattern2 = /^[XYZ][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/i;Si intentan escribir un número o una cadena que no coincida con los patrones, deje de mostrar el carácter. ¿Cómo puedo hacer eso?
Debe dividirlo en múltiples patrones y verificar todos los estados posibles. Tu primer patrón no tiene principio ni fin, ¿no estás seguro de si eso es lo que quieres? En mi ejemplo, pattern = /^[A-Za-z][0-9]{7}[A-Za-z0-9]$/ Podemos verificar la primera letra y los números en p0 = /^[A-Za-z][0-9]{0,7}$/ Y ya lo tenemos todo listo, si el valor no sigue p0 ni pattern , bloquearlo. Seguramente puede hacer expresiones regulares más avanzadas, pero la legibilidad cae rápidamente .
document.getElementById('exampleInput').addEventListener('keydown', (e) => { if (["Backspace","Delete","Enter","ArrowLeft","ArrowRight"].indexOf(e.key) >= 0) { return; } var value = e.target.value.substring(0, e.target.selectionStart) + e.key + e.target.value.substring(e.target.selectionEnd); var pattern = /^[A-Za-z][0-9]{7}[A-Za-z0-9]$/; var p0 = /^[A-Za-z][0-9]{0,7}$/ if (!p0.test(value) && !pattern.test(value)) { e.preventDefault(); } }) <input id="exampleInput">