Thread Kreditkarten Maskierung via RegEx
(12 answers)
Opened by marcus74 at 2015-02-17 16:19 Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 my %found; # c sagt: mache nach dem letzten match weiter (continue after last match) # Das problem ist nur das jede andere regex den counter für diese zurücksetzt # also bedarf es eine prüfung die ohne regex auskommt, # falls ein wert keine keditkartennummer ist, # damit die schleife nicht hängen bleibt while ($row =~ /(3[47]\d{13})/gc) { # Werte zwischenspeichern, Da jede regexp $1 usw. überschreibt. my $number=$1; # also wert speichern und überspringen wenn schon gefunden next if($found{$number}++); # weiter wenn es nicht passt # hier kann es passieren das die regex-engine zurück gesetzt wird # zb durch eine andere regex next unless(is_valid($number)); print "$number\n"; # nun den gefundenen wert mit dem maskierten ersetzen my $masked=$number; # achtung! das setzt die regex-engine zurück! $masked=~s/^.+(\d{4})$/XXXXXXXXXXX$1/; $row=~s/$number/$masked/g; # hiernach beginnt die regex im while wieder am anfang der zeile, # was aber unproblematisch ist, # da alle entweder die werte maskiert wurden, # oder in "%found" stehen. } Last edited: 2015-02-18 11:48:45 +0100 (CET) |