If the opening digits are 300 through 305, an additional 11 digits are needed, whereas if the opening digits are 36 or 38, an additional 12 digits are needed.. To make this simpler, the
Trang 1All Visa numbers start with 4 and are 13 or 16 digits (but not 14 or 15, and so a range cannot be used) 4 matches 4, \d{12} matches the next 12 digits, and (\d{3})? matches an additional 3 digits if they are present
American Express requires a much simpler pattern
MasterCard: 5212345678901234
Visa 1: 4123456789012
Visa 2: 4123456789012345
Amex: 371234567890123
Discover: 601112345678901234
Diners Club: 38812345678901
3[47]\d{13}
MasterCard: 5212345678901234
Visa 1: 4123456789012
Visa 2: 4123456789012345
Amex: 371234567890123
Discover: 601112345678901234
Diners Club: 38812345678901
Trang 2American Express numbers are 15 digits and start with 34 or 37 3[47] matches the first 2 digits, and \d{13} matches the remaining 13 digits
Discover uses a simple pattern
MasterCard: 5212345678901234
Visa 1: 4123456789012
Visa 2: 4123456789012345
Amex: 371234567890123
Discover: 601112345678901234
Diners Club: 38812345678901
6011\d{14}
MasterCard: 5212345678901234
Visa 1: 4123456789012
Visa 2: 4123456789012345
Amex: 371234567890123
Discover: 601112345678901234
Diners Club: 38812345678901
Trang 3All Discover cards are 16 digits and start with digits 6011; 6011\d{14} does the trick
Diners Club is a little trickier
MasterCard: 5212345678901234
Visa 1: 4123456789012
Visa 2: 4123456789012345
Amex: 371234567890123
Discover: 601112345678901234
Diners Club: 38812345678901
(30[0-5]|36\d|38\d)\d{11}
MasterCard: 5212345678901234
Visa 1: 4123456789012
Visa 2: 4123456789012345
Amex: 371234567890123
Discover: 601112345678901234
Diners Club: 38812345678901
Trang 4Diners Club numbers are 14 digits and begin with 300 through 305, 36, or 38 If the opening digits are 300 through 305, an additional 11 digits are needed, whereas
if the opening digits are 36 or 38, an additional 12 digits are needed To make this simpler, the pattern first matches the first three digits regardless of what they are (30[0-5]|36\d|38\d) has three expressions, any of which must match; 30[0-5]
matches 300 through 305, 36\d matches any three-digit number starting with 36, and 38\d matches any three-digit number starting with 38 This way, \d{11} can be used to match the remaining 11 digits
All that remains now is a way to check any of the five card types used here
MasterCard: 5212345678901234
Visa 1: 4123456789012
Visa 2: 4123456789012345
Amex: 371234567890123
Discover: 601112345678901234
Diners Club: 38812345678901
(5[1-5]\d{14})|(4\d{12}(\d{3})?)|(3[47]\d{13})|(6011\d{14})|((30[0-5]|36\d|38\d)\d{11})
MasterCard: 5212345678901234
Visa 1: 4123456789012
Visa 2: 4123456789012345
Amex: 371234567890123
Trang 5Discover: 601112345678901234
Diners Club: 38812345678901
The pattern here uses alternation (providing alternatives or statements) to include all the previous patterns, each separated by a | The result? Simple validation of all major credit card types
Note
The patterns used here ensure that the credit card number has the
correct opening digits and is of the correct length However, not
every 13-digit number that begins with 4 is a valid Visa number A
formula known as Mod 10 can be used to perform a calculation on
the digits (of all the credit card types mentioned here) so as to
determine if the digits are truly valid Mod 10 is an important part
of implementing credit card processing, but it is not a job for
regular expressions because it involves performing mathematical
calculations
Summary
You have now seen practical examples of many of the concepts and ideas
introduced in prior lessons Feel free to use, and adapt, any of the examples used here; with that, welcome to the exciting and productive world of regular
expressions
Appendix C The Regular Expression Tester
Testing and experimenting with regular expressions requires the use of an
application or language (and possibly the writing of code, too) To help you learn and test regular expressions, you may find it useful to download and use the
standalone Regular Expression Tester application that was created specifically for this book This appendix briefly describes this application
Understanding the Regular Expression Tester Application