Bank Tx Cleaner

Bank transaction description cleaner.

by Rodney Golpe

HTML

<div id="result">
</div>

JavaScript

const $result = document.getElementById("result");
//let str = "BOB'S DISCOUNT F DES:PAYROLL  ID:xxxxxxxxxx1106X INDN:  CO ID:9006 229";
const str = "Direct Deposit / CO: JET TOOL & CUTTE ID: 69890300016795X DESC: PAYROLL";

// series of regex replacements aimed at keeping core pieces of transaction description
// (employer name, check number, payee name)
let resultHtml = `<u>ORIGINAL</u>:<br/>${str}<br/>`;

function cleanTxDesc(inputStr) {
    let str = inputStr;

    // series of regex replacements aimed at keeping core pieces of transaction description
    // (employer name, check number, payee name)
    const patterns = [
        [/\b(INDN|ID)\:.*$/gi, ''], // bank indications (INDN:, ID:) to end
        [/CO\:/gi, ''], // CO:
        [/[^a-zA-Z0-9\-\/\'\s]/g, ' '], // non-alphanumeric and most special chars
        [/(\d)([A-Z])/gi, '$1 $2'], // insert space between number and alpha
        [/\b(PPD|CCD)|(PPD|CCD)\b/gi, ' '], // PPD and CCD
        [/(CHECK)\s+(\d+)/i, '$1$2'], // concatenate word 'CHECK' with immediately following number
        [/X+\d+/gi, ''], // x1, xx2, xxx123, etc
        [/\d{1,2}\/(\d{1,2})?(\/)?(\d+)?/gi, ''], // dates (3/3, 3/31, 03/31/16, etc)
        [/\b\d*\b/g, ''], // numbers only
        [/(CHECK)(\d+)/i, '$1 $2'], // insert space between word CHECK and attached number
        [/(^|\s)[A-Z0-9\-\/\']{1}(\s|$)/gi, ' '], // remove single non-whitespace chars
        [/\s{2,}/g, ' '], // remove extra spaces
        [/Direct Deposit|Payroll/gi, ''] // direct deposit
    ];
    
    patterns.forEach(patt => {
        str = str.replace(patt[0], patt[1]);
        resultHtml += `<br/>${str} <span style="color: #bbb; font-family: monospace;">${patt[0]}</span>`;
    });

    return str.trim() || inputStr;
}

cleanTxDesc(str);
$result.innerHTML = resultHtml;