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);