Configurable Regex Test

Testing out a light-weight, configurable javascript regex replacement method.

by davecoulter

HTML

<div id="test">

    Social Security :
    555-55-5555    555555555    555 55 5555    555.55.5555
    
    Credit Card#:
    //16 digit
    1111-2222-3333-4444    1111222233334444    1111.2222.3333.4444    1111 2222 3333 4444
    
    //15 digit (Am-Ex)
    123456789012345    1234-567890-12345    1234.567890.12345    1234 567890 12345
    
    //14 digit (Diner's Club)
    12345678901234    1234-567890-1234    1234.567890.1234    1234 567890 1234

    1
    
    1-22
    
    123
    
    1234
    
    1234-5
    
    123-456---23 7: 8
    
    Order #/Member #: //Assuming any string of digits 3 or more characters long? Conditionally pre-pended? Delimiters?
    #123
    #12345
    #1234523432
    Order #: 1234523
    Order Number: 1234-523
    Ord Number: 1234 523 2345
    Ord #1234523
    order 105-1057321-9957839
    Member Number: #2345-345
    Mbr#3245
    ID #: 56465

    Email:
    [email protected]

    Phone:
    (555) 555-5555    5555555555    555-555-5555    555.555.5555    555 555-5555    555-555 5555    
    

    Text:
    Lorem ipsum [email protected] sit amet, consectetur 1234 NW Jones Ave NW #123 elit, sed do eiusmod tempor incididunt ut labore et Ord Number: 1234 523 2345 magna aliqua. 
    5404 Southeast 69th Ave.
    Portland, OR 97206
    Ut enim ad minim veniam, quis 456 nostrud exercitation 456-789 ullamco (555) 555-5555 nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in 919 SW Taylor St Portland Oregon 97205 in voluptate velit esse cillum dolore eu fugiat 555 55 5555 pariatur. Excepteur sint occaecat cupidatat non 1234 SE Some Road St Ave, City ST 13409-3244, sunt in culpa qui officia 33 mollit anim id est laborum. 1111-2222-3333-4444.

    Sed ut 555 555-5555 unde omnis iste (555) 555-5555 error sit voluptatem 1234-567890-12345 doloremque November 4th 1984, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam 1234-567890-1234 quia voluptas sit...

JavaScript

//Pattern array is loaded with regexes from an external file
var patterns = [
    "(\\b\\d{3}[-.\\s]*?\\d{2}[-.\\s]*?\\d{4}\\b)", //SSN with various delimiters
    "(\\b(\\d{4}[-.\\s]*?){4}\\b)", //16 digit CC (Visa & MC) with various delimiters
    "(\\b\\d{4}[-.\\s]*?\\d{6}[-.\\s]*?\\d{4,5}\\b)", //14-15 digit CC (Diners Club & AmEx) with various delimiters
    "(\\b(order|ord|member|mem|mbr)[-#.:\\s]*(number|num|no)?[-#.:\\s]*((\\d+)[-#.:\\s]*)+\\b)", //ID with "Order" or "Member" prefix and "Number" suffix
    "((#)+[-.:\\s]*((\\d+)[-#.:\\s]*)+)", //ID with "#" prefix
    "((id)+[-#.:\\s]*((\\d+)[-#.:\\s]*)+)", //ID with "ID" prefix    
    "(\\b[\\w._%-]+@[\\w._%-]+\\.[a-z]{2,4}\\b)", //email
    "(\\b[(]?\\d{3}[)]?[\\s.-]?\\d{3}[\\s.-]?\\d{4}\\b)", //phone
    "(\\b([\\d]+)([\\w\\s]+)?(northeast|southeast|northwest|southwest|ne|nw|se|sw|n|s|e|w)([\\w\\s]+)?(road|street|avenue|boulevard|rd|st|ave|blvd)(\.)?([\n\r]+)*([a-z\\s.,;]+)?(\\d{5}(-\\d{4})?)?\\b)", //address
    
    "(\\b\\d{3,}[-.:\\s\\d]*\\b)", //Generic ID composed of 3 or more numbers with delimiters
];

var compositePattern = patterns.join("|");

var dirtyText = $('#test').text();

var modifiers = "gi"; //Global, case-insensitive
var regex = new RegExp(compositePattern, modifiers);
var obfuscator = new RegExp("[a-z0-9]", modifiers);

function Obfuscate(match) {
    return match.replace(obfuscator, "#");
}

var cleanedText = dirtyText.replace(regex, function(match) {
    return Obfuscate(match);
});

alert(dirtyText);
alert(cleanedText);

$('#test').text(cleanedText);