Enmascare una porción de una cadena usando RegExp

Estoy tratando de enmascarar una porción de una cadena usando JavaScript.

por ejemplo, enmascare el segundo y tercer segmento del número de tarjeta de crédito como este usando expresiones regulares:

  • 4567 6365 7987 37834567 **** **** 3783
  • 3457 732837 823723457 ****** 82372

Solo quiero mantener los primeros 4 numbers y los últimos 5 caracteres.

Este es mi primer bash: /(?!^.*)[^a-zA-Z\s](?=.{5})/g

https://regex101.com/r/ZBi54c/2

4 Solutions collect form web for “Enmascare una porción de una cadena usando RegExp”

Puedes intentar esto:

 var cardnumber = '4567 6365 7987 3783'; var first4 = cardnumber.substring(0, 4); var last5 = cardnumber.substring(cardnumber.length - 5); mask = cardnumber.substring(4, cardnumber.length - 5).replace(/\d/g,"*"); console.log(first4 + mask + last5); 

La respuesta aparentemente satisface el OP. Aquí hay otra solución que usa solo Regexes:

 function starry(match, gr1, gr2, gr3) { var stars = gr2.replace(/\d/g, '*'); return gr1 + " " + stars + " " + gr3; } function ccStarry(str) { var rex = /(\d{4})\s(\d{4}\s\d{4}|\d{6})\s(\d{4}|\d{5})/; if (rex.test(str)) return str.replace(rex, starry); else return ""; } var s1 = "4567 6365 7987 3783"; var s2 = "3457 732837 82372"; var s3 = "dfdfdf"; console.log(ccStarry(s1)); console.log(ccStarry(s2)); console.log(ccStarry(s3)); 

Podría cortar los primeros cuatro dígitos y aplicar un reemploop para el rest.

 console.log( ['4567 6365 7987 3783', '3457 732837 82372'].map( s => s.slice(0, 4) + s.slice(4).replace(/\d(?=.* )/g, '*') ) ); 

Si se trata de JavaScript que realiza el enmascaramiento de expresiones regulares, ya ha fallado porque JS nunca debería necesitar saber el número de tarjeta original, excepto cuando acaba de recibirlo del usuario y lo está enviando al server por primera vez, en el que En caso de que no deba enmascararlo de todos modos, el usuario puede verificar si hay errores tipocharts.

Realmente no puedo ayudarte allí, ya has fallado de la peor manera.

En el lado del server, si el número ya está dividido en espacios *, entonces una opción es: (en PHP, pero la misma idea se aplica a todos)

 $parts = explode(" ",$fullnumber); $first = array_shift($parts); $last = array_pop($parts); $middle = implode(" ",$parts); $mask = preg_replace("/\d/","*",$middle); $result = "$first $mask $last"; 

* no debería ser

Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.