Regulárny výraz je postupnosť znakov, ktoré tvoria vzor vyhľadávania. Regulárne výrazy sa používajú hlavne na vyhľadávanie, overovanie a transformáciu textov alebo reťazcov.
Zistite, ako overiť čísla kreditných kariet, ako sú Mastercard, Visa Card a American Express, pomocou regulárnych výrazov.
Kedy použiť RegEx na overenie čísla kreditnej karty?
Služby tretích strán účtujú za každý pokus o transakciu. Či už je transakcia úspešná alebo nie, musíte zaplatiť poplatky. V takýchto prípadoch chcete odmietnuť čísla kreditných kariet, ktoré sú zjavne neplatné. Čísla kreditných kariet môžete rýchlo overiť pomocou regulárnych výrazov.
Pri svojej platobnej funkcii sa však nemôžete úplne spoliehať na overenie regulárneho výrazu. Vydavatelia kariet pravidelne menia svoje vzory čísel kariet (zavádzajú nové vzory alebo sťahujú staré), takže metóda regulárneho výrazu nie je najrobustnejším riešením. Aj keď sa môžete pokúsiť udržať na vrchole vzorov kariet zo zdroja, ako je Wikipedia ktorý sa často aktualizuje.
Regulárny výraz môžete použiť aj na rýchle vyhľadanie značky karty, ktorú potom môžete použiť na zobrazenie log alebo štítkov.
Regulárne výrazy majú niekoľko praktických prípadov použitia. Linuxový príkaz grep je pravdepodobne najbežnejším prípadom praktického použitia regulárneho výrazu.
Kód použitý v tomto projekte je dostupný v a úložisko GitHub a môžete ho bezplatne používať na základe licencie MIT.
RegEx na overenie čísla Mastercard
Číslo Mastercard je platné, ak spĺňa nasledujúce podmienky:
- Reťazec by nemal obsahovať žiadne špeciálne znaky, abecedy ani medzery.
- Počet znakov sa musí rovnať 16.
- Reťazec by mal začínať buď 2-ciferným číselným rozsahom (v rozsahu od 51 do 55) alebo 4-miestnym číselným rozsahom (v rozsahu od 2221 do 2720).
- Ak reťazec začína dvojmiestnym číselným rozsahom (v rozsahu od 51 do 55), ďalších 14 číslic musí byť číslo od 0 do 9.
- Ak reťazec začína 4-miestnym číselným rozsahom (v rozsahu od 2221 do 2720), ďalších 12 číslic musí byť číslo od 0 do 9.
Nasledujúci regulárny výraz spĺňa vyššie uvedené podmienky a môže overiť číslo Mastercard:
^5[1-5][0-9]{14}|^(222[1-9]|22[3-9]\\d|2[3-6]\\d{2}|27[ 0-1]\\d|2720)[0-9]{12}$
Ak vám vyššie uvedený výraz nevyhovuje, pozrite sa sprievodca regulárnymi výrazmi pre začiatočníkov najprv.
Vyššie uvedený regulárny výraz môžete použiť na overenie čísla Mastercard v akomkoľvek programovacom jazyku. Tu je návod, ako to urobiť v Pythone:
importovať re
defcheckMasterCardNo(karta č):
regulárny výraz = "^5[1-5][0-9]{14}|^(222[1-9]|22[3-9]\\d|2[3-6]\\d{2}|27[ 0-1]\\d|2720)[0-9]{12}$"
r = re.compile (regex)ak (re.Vyhľadávanie(r, karta č)):
vytlačiť ("Platné")
inak:
vytlačiť ("Neplatný")karta1 = "5110762060017101"
checkMasterCardNo (karta 1)
karta2 = "8632458236982734"
checkMasterCardNo (karta 2)
Spustenie tohto kódu potvrdí, že prvé číslo je platné, ale druhé nie:
RegEx na overenie čísla karty Visa
Číslo karty Visa je platné, ak spĺňa nasledujúce podmienky:
- Reťazec by nemal obsahovať žiadne špeciálne znaky, abecedy ani medzery.
- Reťazec by mal začínať 4.
- Počet znakov sa musí rovnať 13 alebo 16. Staré vízové karty majú 13 znakov a nové majú 16 znakov.
- Ak sa počet znakov rovná 13, posledných 12 číslic musí byť číslo od 0 do 9.
- Ak sa počet znakov rovná 16, posledných 15 číslic musí byť číslo od 0 do 9.
Nasledujúci regulárny výraz spĺňa vyššie uvedené podmienky a môžete ho použiť na overenie čísla karty Visa:
^4[0-9]{12}(?:[0-9]{3})?$
Nižšie je uvedený prístup Pythonu na overenie čísla karty Visa:
importovať re
defcheckVisaCardNo(karta č):
regulárny výraz = "^4[0-9]{12}(?:[0-9]{3})?$"
r = re.compile (regex)ak (re.Vyhľadávanie(r, karta č)):
vytlačiť ("Platné")
inak:
vytlačiť ("Neplatný")karta1 = "4539890694174109"
checkVisaCardNo (karta 1)
karta2 = "49237429498"
checkVisaCardNo (card2)
Výstup opäť potvrdzuje, že prvé číslo je platné, zatiaľ čo druhé je neplatné:
RegEx na overenie čísla karty American Express
Číslo karty American Express je platné, ak spĺňa nasledujúce podmienky:
- Reťazec by nemal obsahovať žiadne špeciálne znaky, abecedy ani medzery.
- Tento počet znakov sa musí rovnať 15.
- Reťazec by mal začínať číslom 34 alebo 37.
- Posledných 13 číslic musí byť číslo od 0 do 9.
Nasledujúci regulárny výraz spĺňa vyššie uvedené podmienky a môžete ho použiť na overenie čísla karty American Express:
^3[47][0-9]{13}$
Číslo karty American Express môžete overiť pomocou nasledujúceho kódu Python:
importovať re
defcheckAmerican ExpressCardNo(karta č):
regulárny výraz = "^3[47][0-9]{13}$"
r = re.compile (regex)ak (re.Vyhľadávanie(r, karta č)):
vytlačiť ("Platné")
inak:
vytlačiť ("Neplatný")karta1 = "372831730491196"
checkAmerican ExpressCardNo (karta 1)
karta2 = "84732593847743042"
checkAmerican ExpressCardNo (card2)
Výstup ešte raz potvrdí, že prvé číslo je platné, ale druhé je neplatné:
Aplikácie regulárnych výrazov
Na overenie bežných čísel kreditných kariet môžete použiť pomerne jednoduchý regulárny výraz. RegEx je výkonný nástroj, ktorý môžete použiť na predbežné spracovanie údajov, porovnávanie vzorov, extrakciu údajov, lexikálnu analýzu, spracovanie prirodzeného jazyka, zoškrabovanie webu a ďalšie. Regulárne výrazy môžete použiť aj pri vývoji webu na spracovanie validácie formulárov HTML.