- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-05-2019 01:22 PM
Hi All - We have a change in requirement where we want to mask 16 digit credit card information in inbound email body but not 20 digit numbers as they are not credit card. I've below script that works perfectly but it masks any number over 12 digits -- i don't want to mask 20 digits number.
Thoughts on how i need to modify the bolded portion??
(function executeRule(current, previous /*null when async*/) {
var emailVars = [current.body,current.subject,current.body_text];
var arr = [];
for(e = 0; e < emailVars.length; e++) {
var wt = emailVars[e].match(/(https:\/\/.*wetransfer\.com)(.*)[^\s]/g);
var matches = emailVars[e].match(/(https:\/\/.*wetransfer\.com)(.*)[^\s]|([\d]){4}([ -])?([\d]){4}([ -])?([\d]){4}([ -])?([\d]){4}/g);
if(matches){
for(var i = 0; i < 16; i++) {
if(!wt || matches[i] != wt[0]) {
var numCount = 0;
var maskedCredCard = '';
for(var j = 0; j < matches[i].length; j++) {
if(matches[i][j] == '-' ||matches[i][j] == ' '|| numCount >= 12) {
maskedCredCard += matches[i][j];
}
else if(numCount < 12) {
maskedCredCard += '*';
numCount++;
}
}
if(e == 0) {
current.body = current.body.replace(matches[i] ,maskedCredCard);
}
else if(e == 1) {
current.subject = current.subject.replace(matches[i] ,maskedCredCard);
}
else if(e == 2) {
current.body_text = current.body_text.replace(matches[i], maskedCredCard);
}
} //closes WT if statement
}//closes matches for loop
} //closes if there are matches
} //closes loop through email variables
})(current, previous);
Solved! Go to Solution.
- Labels:
-
Incident Management

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-18-2019 01:12 PM
Hi,
Replace this below line and check
var numbers = email_body.match(/\d+/g).map(Number);
WITH
var numbers = email_body.match(/\s\d+/g).map(Number);

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-18-2019 12:13 PM
Okay. Try this code once.
I just used 1 sample string. Replace this with your current.body_text and check.
var email_body = " Dept num is 13234242121212121 CC is 1234567812123456. URL is: https://wetransfer.com/search/1234567890987654. Dept id is: 12345678909876543210";
var numbers = email_body.match(/\d+/g).map(Number);
for(j=0;j<numbers.length;j++) {
//gs.print("Number is "+numbers[j]+"---length is "+numbers[j].toString().length);
if(numbers[j].toString().length == 16) {
var cc_number = numbers[j].toString();
break;
}
}
var credit_card_found=0;
if (j < numbers[j].toString().length) {
credit_card_found=1;
//mask the credit card number
var numCount=0;
var maskedCredCard = '';
for (i=0;i<16;i++) {
if(numCount <12) {
maskedCredCard += '*';
}
else {
maskedCredCard += cc_number[i];
}
numCount++;
}
// gs.print("CC number in "+emailVars[e]+" is "+maskedCredCard+"---"+cc_number);
} //if j matches
email_body = email_body.replace(cc_number, maskedCredCard);
gs.print("Email body is "+email_body);
Mark the comment as a correct answer and also helpful once worked.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-18-2019 12:30 PM
That works in background script! how should we clean it for Business rule?

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-18-2019 12:39 PM
Just copy this code in BR and it should work.
//var email_body = " Dept num is 13234242121212121 CC is 1234567812123456. URL is: https://wetransfer.com/search/1234567890987654. Dept id is: 12345678909876543210";
var eamil_body = current.body_text;
var numbers = email_body.match(/\d+/g).map(Number);
for(j=0;j<numbers.length;j++) {
//gs.print("Number is "+numbers[j]+"---length is "+numbers[j].toString().length);
if(numbers[j].toString().length == 16) {
var cc_number = numbers[j].toString();
break;
}
}
var credit_card_found=0;
if (j < numbers[j].toString().length) {
credit_card_found=1;
//mask the credit card number
var numCount=0;
var maskedCredCard = '';
for (i=0;i<16;i++) {
if(numCount <12) {
maskedCredCard += '*';
}
else {
maskedCredCard += cc_number[i];
}
numCount++;
}
// gs.print("CC number in "+emailVars[e]+" is "+maskedCredCard+"---"+cc_number);
} //if j matches
email_body = email_body.replace(cc_number, maskedCredCard);
current.body_text = email_body;
gs.print("Email body is "+email_body);
Mark this comment as a correct answer and also other comments as helpful if this has helped you.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-18-2019 01:00 PM

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-18-2019 01:12 PM
Hi,
Replace this below line and check
var numbers = email_body.match(/\d+/g).map(Number);
WITH
var numbers = email_body.match(/\s\d+/g).map(Number);