Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: numbers masking

by johngg (Canon)
on May 16, 2012 at 07:24 UTC ( [id://970762]=note: print w/replies, xml ) Need Help??


in reply to numbers masking

Take the separators out, preserving them and their offset adjusted for their position as it would be in the number without them. Then do the masking and, finally, put them back.

knoppix@Microknoppix:~$ perl -E ' > $num = q{17403 4893 18345-973409}; > say $num; > $sepCt = 0; > push @seps, [ $1, $-[ 0 ] - $sepCt ++ ] while $num =~ m{(\D)}g; > $num =~ s{\D}{}g; > $maskLen = length( $num ) - 10; > substr $num, 6, $maskLen, q{X} x $maskLen; > substr $num, $_->[ 1 ], 0, $_->[ 0 ] for reverse @seps; > say $num;' 17403 4893 18345-973409 17403 4XXX XXXXX-XX3409 knoppix@Microknoppix:~$

I hope this is helpful.

Update: This can be simplified. The adjustment of position and replacement of separators in reverse order is not necessary. Separators can be put back into the string from left to right as, once one has been put back in, the rest of the string has been moved one character to the right so the next position is already correct without adjustment.

knoppix@Microknoppix:~$ perl -E ' $num = q{17403 4893 18345-973409}; say $num; push @seps, [ $1, $-[ 0 ] ] while $num =~ m{(\D)}g; $num =~ s{\D}{}g; $maskLen = length( $num ) - 10; substr $num, 6, $maskLen, q{X} x $maskLen; substr $num, $_->[ 1 ], 0, $_->[ 0 ] for @seps; say $num;' 17403 4893 18345-973409 17403 4XXX XXXXX-XX3409 knoppix@Microknoppix:~$

Breaking this down as requested by Anonymonk.

  • Match, capture and record the position of all non-digits in the string

  • Remove all non-digits from the string

  • Mask all but the first six and last four digits

  • Insert the non-digits back into the string in their recorded positions

Update 2: Clarified (I hope) the wording of the first update.

Cheers,

JohnGG

Replies are listed 'Best First'.
Re^2: numbers masking
by Anonymous Monk on May 16, 2012 at 07:39 UTC

    Thnks, but can u plz explain it

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://970762]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (8)
As of 2024-04-23 08:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found