Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

119
Vistas
¿Cómo puedo enmascarar dinámicamente todos los dígitos excepto los últimos 4 siempre?

¿Cómo puedo enmascarar todos los dígitos que el usuario ingresa dinámicamente?

Escenario 1: Entrada de usuario: 1234 5678 9123 4414 Salida: xxxx xxxx xxxx 4414

Escenario 2: Entrada de usuario: 12345678 8234245 Salida: xxxxxxxx xxx4245

Escenario 3: Entrada del usuario: 12 345678911 Salida: xx xxxxx8911

Lo que tengo es solo una solución y es estático. ¿Cómo puedo hacer que mi código sea dinámico? para que pueda disminuir mi declaración if else?

 function hideMask(num) { var regExp = /[a-zA-Z]/g; if(regExp.test(num)){ return null; } else { if(num.replace(/\s/g, '').length == 16){ // 16 digit mask = num.substring(num.length - 14).replace(/\d/g,"x"); unmaskCardNumber = num.substring(14, 19); return(mask + unmaskCardNumber); }else if(num.replace(/\s/g, '').length == 18){ //18 digit mask = num.substring(0,15).replace(/\d/g,"x"); unmaskCardNumber = num.substring(15, 19); return(mask + unmaskCardNumber); }else{ return null; } } }
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede lograr fácilmente el resultado usando split , reverse y map

 function mask(s) { let count = 0; return s .split("") .reverse() .map((n, i) => (!n.match(/\d/) ? n : count < 4 ? (count++, n) : "x")) .reverse() .join(""); } 

 function mask(s) { let count = 0; return s .split("") .reverse() .map((n, i) => { if (!n.match(/\d/)) return n; else { return count < 4 ? (count++, n) : "x"; } }) .reverse() .join(""); } console.log(mask("1234 5678 9123 4414")); console.log(mask("12345678 8234245")); console.log(mask("12 345678911")); console.log(mask("12 345678 9 1 1")); // CORNER CASE

Incluso puede omitir el paso reverse si usa reduceRight como:

 function mask(s) { let count = 0; return s .split("") .reduceRight((acc, n, i) => { acc.push(!n.match(/\d/) ? n : count < 4 ? (count++, n) : "x"); return acc; }, []) .reverse() .join(""); } 

 function mask(s) { let count = 0; return s .split("") .reduceRight((acc, n, i) => { acc.push(!n.match(/\d/) ? n : count < 4 ? (count++, n) : "x"); return acc; }, []) .reverse() .join(""); } console.log(mask("1234 5678 9123 4414")); console.log(mask("12345678 8234245")); console.log(mask("12 345678 9 1 1"));

about 4 years ago · Juan Pablo Isaza Denunciar

0

Lo haría, usando slice y replace : primero reemplace todos los caracteres alfanuméricos en la cadena, barra los últimos cuatro con 'x' y agregue los últimos cuatro de antes:

 function mask(input) { return input .slice(0, input.length - 4) .replace(/([a-zA-Z0-9])/g, 'x') + input.slice(-4) } console.log(mask('abcd efgh 1234 5678'))

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda