2012-02-16 27 views
28

Sto testando un'applicazione in cui il modello Regex combacia con la carta di credito, quindi tali numeri devono essere evidenziati. Sto utilizzando il sito http://regexpal.com/ per creare numeri di carte di credito di credito di prova per i miei test. il mio requisito è di avere numeri di carta di credito validi che possono avere "-" e/o "," tra di loro. Non ho avuto successo a costruire un numero come quando lo provo usando il sitoTest numero di carta di credito Regex

http://regexpal.com.

Ho bisogno alcuni numeri di credito con scenari di sotto

  1. numero di carta di credito valida che possono avere "-" tra ogni cifra.
  2. numero di carta di credito valido che può avere "," tra qualsiasi cifra.
  3. numero di carta di credito valido che può avere cobination di "," o "-" tra qualsiasi cifra.
+1

In che lingua stai scrivendo? A seconda della lingua, potrebbe essere più facile fare una rimozione usando find e replace per '-' e', 'prima di convalidare con regex. –

+1

Questo è relativo allo script java in quanto il sito utilizza RegexPal 0.1.4 - un tester di espressioni regolari JavaScript – user1209784

risposta

42

Rimuovere tutte le , e - e altre non cifre dalla stringa prima.

quindi utilizzare questa espressione regolare che corrisponde Visa, MasterCard, American Express, Diners Club, Discover e carte 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

Si potrebbe considerare di modificare la risposta per includere un'espressione regolare valida per le carte di credito, che è possibile trovare qui: http: // www. regular-expressions.info/creditcard.html –

+0

e se il numero della carta di credito non è continuo, ad esempio 4111111111111111 e lo metto in 4111 1111 1111 1111 modo? questo dà errore. – saadk

+3

@saadk rimuove i caratteri non numerici dall'input prima della convalida. –

105

carta di credito comune vendor espressioni regolari:

  • Amex carte : ^3[47][0-9]{13}$
  • BCGlobal: ^(6541|6556)[0-9]{12}$
  • Carte Blanche Carta: ^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 Payment Card: ^63[7-9][0-9]{13}$
  • JCB Carta: ^(?:2131|1800|35\d{3})\d{11}$
  • KoreanLocalCard: ^9[0-9]{15}$
  • Carta
  • Laser: ^(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 Scheda: ^(6334|6767)[0-9]{12}|(6334|6767)[0-9]{14}|(6334|6767)[0-9]{15}$
  • Interruttore Carta: ^(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 Carta: ^(62[0-9]{14,17})$
  • carta Visa: ^4[0-9]{12}(?:[0-9]{3})?$
  • Visa Master Card: ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14})$
+3

Formattato la tua risposta come una lista, vorrei alfabetizzare questa lista, ma lascerò tu decidi. –

+0

più uno per i dettagli, grazie –

+0

come consentire spazi e trattini in queste regex? – Nikhil

6

Per La Scheda Rupay debito: ^6[0-9]{15}$

+0

@ trimul-rao Puoi farlo controllare? Questo non funzionava per la mia Rupay Card. – kartikmaji

0

Regx per carta Rupay:

(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})

usando serie bin: 508.500-508.999, 606.985-606.999, 607.000-607.899, 607.900-607.984, 608.001-608.500, 652.150 --- 652.199, 652.200 --- 652999, 653000 --- 653099, 653100 --- 653149,

0

Mi è venuta una regex che consente trattini e spazi. Provalo qui: https://regex101.com/r/Rx2iWD/1

Per consentire virgole (che ritengo sia inusuale), basta aggiungerlo alla definizione sep.

In 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

La risposta accettata è grande, ma per accogliere la nuova MasterCard BIN, credo che avrebbe bisogno di essere aggiornato per:

^(?: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})$

(la il pezzo critico è [25][1-7][0-9]{14}, poiché la prima cifra può ora essere un 2 o un 5 e la seconda cifra può essere fino a 7)

Ple come correggermi se sbaglio!

0

First Data convalida 15 cifre per Amex e 16 per il visto, MC, scoprire, Diners e JCB quindi ho solo inviare il numero della carta a loro se il numero è di 15 o 16 cifre usando questo:

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

Regex per la principale carta di reti

master Card (2-Bin, 5-Bin entrambi): "(?: 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}"

Visa: "^ 4 [0-9] {6,} $"

del Diner Club: "(^ 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} $) "

Scopri:"^6011 -? \ D {4} -? \ d {4} -? \ d {4} $ "

Problemi correlati