3 votes

Javascript - masquage du numéro de compte dans une chaîne de caractères

J'ai un défi amusant pour lequel je n'ai pas trouvé de réponse ici. J'ai une chaîne de texte, qui pourrait contiennent potentiellement un numéro de compte. Exemple :

"Hi, my account number is 1234 5678 9012 2345 and I'm great."

Le numéro de compte peut prendre plusieurs formes, car il est saisi par l'utilisateur :

Possibilités de base et potentielles ci-dessous :

1234 1234 1234 1234
1234 1234 1234 1234 1
BE12 1234 1234 1234

1234-1234-1234-1234
1234.1234.1234.1234
1234123412341234
12341234 1234 1234

1234-1234-1234-1234-1
1234.1234.1234.1234.1
12341234123412341
12341 234 1234 12341

BE12-1234-1234-1234
be12-1234-1234 1234
Be12.1234.1234-1234
BE12123412341234

(essentiellement des nombres entiers avec un trait d'union, un espace ou un point au milieu, à l'exception du format IBAN, qui comporte deux caractères au début).

Ce dont j'ai besoin en sortie, c'est que tout soit masqué, sauf les quatre derniers chiffres.

"Hi, my account number is **** **** **** 2345 and I'm great."

Comment je pense que je devrais aborder ce problème :

  • Analysez chaque chaîne et essayez de trouver les modèles de numéro de compte ci-dessus.
  • Créer une expression régulière magique qui remplace le numéro de compte de la manière dont j'en ai besoin.
  • S'il y a un numéro de compte, utilisez cette RegEx pour le faire.

Quelle serait votre approche ?

Merci !

2voto

Jan Points 370

Vous pourriez assortir tout ce qui précède avec :

\b[\dX][-. \dX]+(\d{4})\b

... et le remplacer par * x strlen(match) - 4 + \1 voir une démo sur regex101.com .


Sur JavaScript :

var string = "Hi, my account number is 1234 5678 9012 2345 and I'm great.";
var new_string = string.replace(/\b[\dX][-. \dX]+(\d{4})\b/g, function(match, capture) {
    return Array(match.length-4).join("*") + capture;
});
print(new_string);

Voir une démo sur ideone.com .

2voto

vol7ron Points 11270

En empruntant l'excellent modèle regex de Jan, on peut l'étendre pour capturer également le dernier chiffre (voir l'exemple ci-dessous).

Note : Sa méthode d'utilisation replace() est meilleur, je recommande de l'utiliser pour plus de clarté. Il s'agit uniquement de proposer une approche alternative utilisant match()

//  Setup
let str = `1234 1234 1234 1234
1234-1234-1234-1234
12341234123412341234
1234 1234 1234 1234 1
12341234123412341
1234-1234-1234-1234-1
1234.1234.1234.1234.1
XX12 3456 1234 1234
XX123456123123
XX12-3456-1234-1234
XX12.3456.1234.1234
This is a sentence for visual proof 1234 5678 9012 3456
And some XX32 1111.2222-9999-2 more proof`,
  nums = str.split('\n');

var re = new RegExp(/(\b[\dX][-. \dX]+(\d{4}.?\d?)\b)/);

// Convert Nums
var converted = nums.map(num => {
  let match = num.match(re);

  if (match) {
    let orig = match[1],
      end    = match[2],
      hidden = orig.substr(0, orig.length - end.length);

    hidden = hidden.replace(/\S/g, "X") + end;
    num    = num.replace(orig, hidden);
  }

  return num;
});

// Visual Verification
console.log(converted);

0voto

Mehdi Khademloo Points 1493

Utiliser une Regex avec un look ahead astuce, il suffit de trouver

\d{4}([ -.])(?![A-Za-z])

et remplacer par

****\1

0voto

ajai Jothi Points 1435
str.replace(/\b[\dX][-. \dX]+(\d{4})\b/g, '**** **** **** $1')

console.log("Hi, my account number is 1234-5678-9012-2345 and I'm great.".replace(/\b[\dX][-. \dX]+(\d{4})\b/g, '**** **** **** $1'));
console.log("Hi, my account number is 1234 5678 9012 2345 and I'm great.".replace(/\b[\dX][-. \dX]+(\d{4})\b/g, '**** **** **** $1'));
console.log("Hi, my account number is 1234.5678.9012.2345.1 and I'm great.".replace(/\b[\dX][-. \dX]+(\d{4})\b/g, '**** **** **** $1'));
console.log("Hi, my account number is XX123456123123 and I'm great.".replace(/\b[\dX][-. \dX]+(\d{4})\b/g, '**** **** **** $1'));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X