El otro post ya te pase una página donde podías hacer pruebas de regex y aprender a hacerlo pues dicha página te explica el regex que tienes. Vamos a explicar el tuyo.
Primero tienes esto:
[^0-9]{20}
Esto es un set negativo donde buscas cualquier cosa que
NO sea un número de 0-9 y que tenga una longitud de 20 caracteres.
Luego tienes esto:
[^A-Z]{21,22}
Otro set negativo donde buscas cualquier cosa que
NO sea A-Z y que tenga una longitud de entre 21 y 22 caracteres.
Entonces, lo que le estamos diciendo es, reemplazame, aquellos strings donde haya especificamente 20 caracteres que NO sean un número seguido de 21 o 22 caracteres que no sean mayúsculas... Supongo que ya puedes ver el fallo.
Aquí no tienes que buscar reemplazar (sanitizar), tienes que validar. Es decir, no buscas un replace, buscas que el valor sea especificamente el formato que le estas indicando (test). Por tanto, verifica que de principio (^) a fin ($), el texto contiene exactamente 20 caracteres numéricos y 2 letras mayúsculas. O lo que es lo mismo:
const tests = [
'1234567890AB',
'1234567890AB1234567890',
'12345678901234567890AABB',
'123456789012345678901A',
'1234567890123456789AB2',
'$$$$$$$$$$$$$$$$$$$$00',
'dsakdsakldjaksljdklasa',
'askjdasdjklasjdkasjd12',
'12345678901234567890AB',
];
const regexCode = /[0-9]{20}[A-Z]{2}$/g;
tests.forEach(function(value) {
if (!regexCode.test(value)) {
console.log(value + ' no es un codigo valido');
}
});
El único que no te saltara como no valido es el ultimo (12345678901234567890AB) puesto que cumple con las condiciones.
Saludos
La expresión regular funciona perfecto! pero no en el contexto que la quiero aplicar, ya que estoy intentando que sea lo opuesto digamos...
form_verify_email.verify_code.value = String(form_verify_email.verify_code.value).replace(/[0-9]{20}[A-Z]{2}/g, '');
ya que si encuentra problemas va a borrar eso del input con .replace
intente estos:
form_verify_email.verify_code.value = String(form_verify_email.verify_code.value).replace(/^[0-9]{20}[A-Z]{2}/g, '');
form_verify_email.verify_code.value = String(form_verify_email.verify_code.value).replace(/[^0-9]{20}[^A-Z]{2}/g, '');
Pero ninguno me está funcionando, (está útil esa pagina que me habías pasado)
EDIT: no soy experto pero creo que a el segundo intento le falta un OR o || pero en expresión regular creo yo jeje, voy a revisar...
EDIT X2: mmm no no tuve suerte