2012-02-16 1 views
28

Я тестирую одно приложение, в котором шаблон Regex соответствует кредитной карте, тогда такие цифры должны быть выделены. Я использую сайт http://regexpal.com/, чтобы создать номера кредитных кредитных карт для тестирования. мое требование состоит в том, чтобы иметь действительные номера кредитных карт, которые могут иметь «-» и/или «» между ними. Мне не удалось построить такой номер, когда я его тестирую, используя сайтПроверка количества кредитных карт Regex

http://regexpal.com.

Мне нужны несколько кредитных номеров со сценариями ниже

  1. действительного номера кредитной карты, которая может иметь «-» между любой цифрой.
  2. действительный номер кредитной карты, который может иметь «,» между любыми цифрами.
  3. действительный номер кредитной карты, который может содержать привязку «,» или «-» между любыми цифрами.
+1

Какой язык вы пишете это в? В зависимости от языка было бы проще сделать удаление с помощью find и replace для '-' и', 'перед проверкой с помощью регулярного выражения. –

+1

Это связано с java-скриптом, так как сайт использует RegexPal 0.1.4 - тестер регулярного выражения JavaScript – user1209784

ответ

42

Удалите все , и - и другие цифры, отличные от строки.

Затем используйте это регулярное выражение, которое соответствует Visa, MasterCard, American Express, Diners Club, Discover и JCB карты:

^(?:4[0-9]{12}(?:[0-9]{3})?|[25][1-7][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$

+1

Возможно, вы захотите изменить свой ответ, чтобы включить действующее регулярное выражение для кредитных карт, которое вы можете найти здесь: http: // www. regular-expressions.info/creditcard.html –

+0

Что делать, если номер кредитной карты не является непрерывным, например, 4111111111111111, и я положил его в 4111 1111 1111 1111 способом? это дает ошибку. – saadk

+3

@saadk удаляет нечисловые символы из ввода перед проверкой. –

105

кредитная карта поставщика регулярные выражения:

  • Amex карты : ^3[47][0-9]{13}$
  • BCGlobal: ^(6541|6556)[0-9]{12}$
  • Carte Blanche Card: ^389[0-9]{11}$
  • Diners Club Card: ^3(?:0[0-5]|[68][0-9])[0-9]{11}$
  • Discover Card: ^65[4-9][0-9]{13}|64[4-9][0-9]{13}|6011[0-9]{12}|(622(?:12[6-9]|1[3-9][0-9]|[2-8][0-9][0-9]|9[01][0-9]|92[0-5])[0-9]{10})$
  • Insta карты оплаты: ^63[7-9][0-9]{13}$
  • JCB Card: ^(?:2131|1800|35\d{3})\d{11}$
  • KoreanLocalCard: ^9[0-9]{15}$
  • Laser Card: ^(6304|6706|6709|6771)[0-9]{12,15}$
  • Maestro Card: ^(5018|5020|5038|6304|6759|6761|6763)[0-9]{8,15}$
  • Mastercard : ^5[1-5][0-9]{14}$
  • Solo Card: ^(6334|6767)[0-9]{12}|(6334|6767)[0-9]{14}|(6334|6767)[0-9]{15}$
  • карта коммутатора: ^(4903|4905|4911|4936|6333|6759)[0-9]{12}|(4903|4905|4911|4936|6333|6759)[0-9]{14}|(4903|4905|4911|4936|6333|6759)[0-9]{15}|564182[0-9]{10}|564182[0-9]{12}|564182[0-9]{13}|633110[0-9]{10}|633110[0-9]{12}|633110[0-9]{13}$
  • Union Pay карта: ^(62[0-9]{14,17})$
  • Visa Card: ^4[0-9]{12}(?:[0-9]{3})?$
  • Visa Master Card: ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14})$
+3

Отформатированный ваш ответ в виде списка, я бы алфавитировал этот список, но я позволю Вам решать. –

+0

плюс один для деталей, спасибо –

+0

как разрешить пробелы и дефисы в этом регулярном выражении? – Nikhil

6

Для Rupay дебетовой карты: ^6[0-9]{15}$

+0

@ trimul-rao Не могли бы вы проверить это? Это не работало для моей карты Rupay. – kartikmaji

0

Regx for Rupay card:

(508 [5-9] [0-9] {12}) | (6069 [8-9] [0-9] {11}) | (607 [0-8 ] [0-9] {12}) | (6079 [0-8] [0-9] {11}) | (608 [0-5] [0-9] {12}) | (6521 [5- 9] [0-9] {11}) | (652 [2-9] [0-9] {12}) | (6530 [0-9] {12}) | (6531 [0-4] [0 -9] {11})

использованием бин серии: 508500 - 508999, 606985 - 606999, 607000 - 607899, 607900 - 607984, 608001 - 608500, 652150 --- 652199, 652200 --- 652999, 653000 --- 653099, 653100 --- 653149,

0

Я придумал регулярное выражение, которое позволяет тире и пробелы. Протестируйте его здесь: https://regex101.com/r/Rx2iWD/1

Чтобы разрешить запятые (что, как мне кажется, необычно), просто добавьте его в определение sep.

В PHP:

$ccPatt = '/ 
    (?(DEFINE) 
     (?<sep> [ -]?) 
    ) 
    (?<!\d)(?: 
     \d{4} (?&sep) \d{4} (?&sep) \d{4} (?&sep) \d{4}    # 16 digits 
    | \d{3} (?&sep) \d{3} (?&sep) \d{3} (?&sep) \d (?&sep) \d{3} # 13 digits 
    | \d{4} (?&sep) \d{6} (?&sep) \d{4}        # 14 digits 
    | \d{4} (?&sep) \d{6} (?&sep) \d{5}        # 15 digit card 
    )(?!\d) 
/xu'; 
3

Принятая ответ велик, но для размещения нового MasterCard BIN, я считаю, что он должен был бы быть обновлена:

^(?:4[0-9]{12}(?:[0-9]{3})?|[25][1-7][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$

(критическая часть составляет [25][1-7][0-9]{14}, так как первая цифра может быть либо 2, либо 5, а вторая цифра может быть до 7)

Ple меня исправить, если я ошибаюсь!

0

First Data проверяет 15 цифр для Amex и 16 для визы, тс, узнать, обедающих и JCB, поэтому я только отправить номер карты для них, если число имеет длину 15 или 16 цифр с помощью этого:

^[0-9]{15}(?:[0-9]{1})?$ 
0

Regex для ведущих карты сети

Master Card (2-Bin, 5-Bin и): "(?: 5 [1-5] [0-9] {2} | 222 [1-9 ] | 22 [3-9] [0-9] | 2 [3-6] [0-9] {2} | 27 [01] [0-9] | 2720) [0-9] {12}»

V иша: "^ 4 [0-9] {6} $"

Diner клуб: «(^ 30 [0-5] [0-9] {11} $) | (^ (36 | 38) [0-9] {12} $) "

American Express: "^ [34 | 37] [0-9] {14} $"

JCB:" (^ 3 [0-9] {15} $) | (^ (2131 | 1800) [0-9] {11} $) "

Обнаружение:"^6011 -? \ D {4} - ? \ d {4} -? \ d {4} $ "