Et regulært uttrykk er en sekvens av tegn som danner et søkemønster. Regulære uttrykk brukes hovedsakelig for å søke, validere og transformere tekster eller strenger.
Lær hvordan du validerer kredittkortnumre som Mastercard, Visa Card og American Express med vanlige uttrykk.
Når skal jeg bruke RegEx for å validere et kredittkortnummer?
Tredjepartstjenestene tar betalt for hvert transaksjonsforsøk. Enten transaksjonen er vellykket eller ikke, må du betale kostnadene. I slike tilfeller vil du avslå kredittkortnumre som åpenbart er ugyldige. Du kan raskt validere kredittkortnumre ved hjelp av regulære uttrykk.
Men du kan ikke stole helt på validering av regulære uttrykk for betalingsfunksjonen din. Kortutstedere endrer regelmessig kortnummermønstrene sine (introduserer nye mønstre eller trekker ut gamle), så regex-metoden er ikke den mest robuste løsningen. Selv om du kan prøve å holde oversikt over kortmønstrene fra en kilde som Wikipedia som oppdateres ofte.
Du kan også bruke regex for raskt å finne kortmerket som du deretter kan bruke til å vise logoer eller etiketter.
Regelmessige uttrykk har flere praktiske brukstilfeller. Linux grep-kommandoen er sannsynligvis den vanligste praktiske bruken av regex.
Koden som brukes i dette prosjektet er tilgjengelig i en GitHub-depot og er gratis for deg å bruke under MIT-lisensen.
RegEx for å validere Mastercard-nummer
Et Mastercard-nummer er gyldig hvis det oppfyller følgende betingelser:
- Strengen skal ikke inneholde spesialtegn, alfabeter eller mellomrom.
- Antall tegn må være lik 16.
- Strengen skal starte med enten et 2-sifret tallområde (fra 51 til 55) eller et 4-sifret tallområde (fra 2221 til 2720).
- Hvis strengen starter med et 2-sifret tallområde (fra 51 til 55), må de neste 14 sifrene være et tall mellom 0 og 9.
- Hvis strengen starter med et 4-sifret tallområde (fra 2221 til 2720), må de neste 12 sifrene være et tall mellom 0 og 9.
Følgende regulære uttrykk oppfyller vilkårene ovenfor og kan validere et Mastercard-nummer:
^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}$
Hvis du ikke er komfortabel med uttrykket ovenfor, sjekk ut en nybegynnerguide til regulære uttrykk først.
Du kan bruke regex ovenfor for å validere Mastercard-nummeret på et hvilket som helst programmeringsspråk. Slik gjør du det i Python:
import re
defcheckMasterCardNo(kortnr):
regex = "^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)hvis (re.Søk(r, kortnr)):
skrive ut("Gyldig")
ellers:
skrive ut("Ikke gyldig")kort1 = "5110762060017101"
checkMasterCardNo (kort1)
kort2 = "8632458236982734"
checkMasterCardNo (kort2)
Å kjøre denne koden vil bekrefte at det første tallet er gyldig, men det andre ikke er:
RegEx for å validere Visa-kortnummer
Et Visa-kortnummer er gyldig hvis det oppfyller følgende betingelser:
- Strengen skal ikke inneholde spesialtegn, alfabeter eller mellomrom.
- Strengen skal begynne med 4.
- Antall tegn må være lik 13 eller 16. De gamle visa-kortene har 13 tegn og de nye har 16 tegn.
- Hvis antall tegn er lik 13, må de siste 12 sifrene være et tall mellom 0 og 9.
- Hvis antall tegn er lik 16, må de siste 15 sifrene være et tall mellom 0 og 9.
Følgende regulære uttrykk oppfyller betingelsene ovenfor, og du kan bruke den til å validere et Visa-kortnummer:
^4[0-9]{12}(?:[0-9]{3})?$
Nedenfor er Python-tilnærmingen for å validere et Visa-kortnummer:
import re
defcheckVisaCardNo(kortnr):
regex = "^4[0-9]{12}(?:[0-9]{3})?$"
r = re.compile (regex)hvis (re.Søk(r, kortnr)):
skrive ut("Gyldig")
ellers:
skrive ut("Ikke gyldig")kort1 = "4539890694174109"
checkVisaCardNo (kort1)
kort2 = "49237429498"
checkVisaCardNo (kort2)
Igjen bekrefter utdata at det første tallet er gyldig mens det andre er ugyldig:
RegEx for å validere American Express-kortnummer
Et American Express-kortnummer er gyldig hvis det oppfyller følgende betingelser:
- Strengen skal ikke inneholde spesialtegn, alfabeter eller mellomrom.
- Dette antallet tegn må være lik 15.
- Strengen skal starte med 34 eller 37.
- De siste 13 sifrene må være et tall mellom 0 og 9.
Følgende regulære uttrykk oppfyller betingelsene ovenfor, og du kan bruke den til å validere et American Express-kortnummer:
^3[47][0-9]{13}$
Du kan validere et American Express-kortnummer ved å bruke følgende Python-kode:
import re
defcheckAmericanExpressCardNo(kortnr):
regex = "^3[47][0-9]{13}$"
r = re.compile (regex)hvis (re.Søk(r, kortnr)):
skrive ut("Gyldig")
ellers:
skrive ut("Ikke gyldig")kort1 = "372831730491196"
checkAmericanExpressCardNo (kort1)
kort2 = "84732593847743042"
checkAmericanExpressCardNo (kort2)
Nok en gang bekrefter utdata at det første tallet er gyldig, men det andre er ugyldig:
Anvendelser av regulære uttrykk
Du kan bruke noen ganske enkle regex for å validere vanlige kredittkortnumre. RegEx er et kraftig verktøy som du kan bruke for dataforbehandling, mønstertilpasning, datautvinning, leksikalsk analyse, naturlig språkbehandling, nettskraping og mer. Du kan også bruke regulære uttrykk i webutvikling for å håndtere validering av HTML-skjemaer.