$re = '/\b(?<![\$\&\+\_\--\/\<\>\?])(?:(?:(?:4\d|5[1-5]|65)(\d\d)(?!\1{3})|35(?:2[89]|[3-8]\d)|6(?:011|4[4-9]\d|22(?:1(?!1\d|2[1-5])|[2-8]|9(?=1\d|2[1-5]))))([\ \-]?)(?<!\d\ \d{4}\ )(?!(\d)\3{3})(\d{4})\2(?!\4|(\d)\5{3}|1234|2345|3456|5678|7890)(\d{4})(?!\ \d{4}\ \d)\2(?!\6|(\d)\7{3}|1234|3456)|3[47]\d{2}([\ \-]?)(?<!\d\ \d{4}\ )(?!(\d)\9{5}|123456|234567|345678)\d{6}(?!\ \d{5}\ \d)\8(?!(\d)\10{4}|12345|56789|67890)\d|(?:(?:5[0678]|6[27])\d\d|6304|6390)\d{11}(?!(\d)\11{3}))\d{4}(?![\$\&\+\_\-\/\<\>])(?![\.\?]\d)\b/x';
$str = '4111111111111111
4111 1111 1111 1111
4111-1111-1111-1111
4111-1111 1111-1111
4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
American Express
378282246310005
American Express
371449635398431
American Express Corporate
378734493671000
Australian BankCard
5610591081018250
Diners Club
30569309025904
Diners Club
38520000023237
Discover
6011111111111117
Discover
6011000990139424
JCB
3530111333300000
JCB
3566002020360505
MasterCard
5555555555554444
MasterCard
5105105105105100
Visa
4111111111111111
Visa
4012888888881881
Visa
4222222222222
Note : Even though this number has a different character count than the other test numbers, it is the correct and functional number.
Processor-specific Cards
Dankort (PBS)
76009244561
Dankort (PBS)
5019717010103742
Switch/Solo (Paymentech)
6331101999990016
Visa
4929208147724685
4539261278252432
4916790209546242
4556229836495866
4556624948936262
Mastercard
5527513721190671
5427136938547169
5501820872619287
5106667846492187
5348965176175440
Discover
6011692621234093
6011505674384294
6011686367026051
6011805238158246
6011056229327552
American Express
370831029267044
345838860105292
346823285239073
370750517718351
340533441239380
PHONE NUMBERS:
Local (Canada)
613-555-0104
613-555-0141
613-555-0159
613-555-0130
613-555-0163
613-555-0137
International (Canada)
+1-613-555-0104
+1-613-555-0141
+1-613-555-0159
+1-613-555-0130
+1-613-555-0163
+1-613-555-0137';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php