Et regulært udtryk er en sekvens af tegn, der danner et søgemønster. Regulære udtryk bruges hovedsageligt til at søge, validere og transformere tekster eller strenge.

Lær, hvordan du validerer kreditkortnumre som Mastercard, Visa Card og American Express med regulære udtryk.

Hvornår skal man bruge RegEx til at validere et kreditkortnummer?

Tredjepartstjenesterne opkræver for hvert transaktionsforsøg. Uanset om transaktionen er vellykket eller ej, skal du betale gebyrerne. I sådanne tilfælde ønsker du at afvise kreditkortnumre, der tydeligvis er ugyldige. Du kan hurtigt validere kreditkortnumre ved hjælp af regulære udtryk.

Men du kan ikke helt stole på validering af regulære udtryk for din betalingsfunktion. Kortudstedere ændrer regelmæssigt deres kortnummermønstre (introducerer nye mønstre eller trækker gamle tilbage), så regex-metoden er ikke den mest robuste løsning. Selvom du kan prøve at holde styr på kortmønstrene fra en kilde som Wikipedia der opdateres ofte.

Du kan også bruge regex til hurtigt at finde kortmærket, som du derefter kan bruge til at vise logoer eller etiketter.

instagram viewer

Regulære udtryk har flere praktiske anvendelsestilfælde. Linux grep kommandoen er nok det mest almindelige praktiske anvendelsestilfælde af regex.

Koden brugt i dette projekt er tilgængelig i en GitHub-depot og er gratis for dig at bruge under MIT-licensen.

RegEx for at validere Mastercard-nummer

Et Mastercard-nummer er gyldigt, hvis det opfylder følgende betingelser:

  1. Strengen må ikke indeholde specialtegn, alfabeter eller mellemrum.
  2. Antallet af tegn skal være lig med 16.
  3. Strengen skal starte med enten et 2-cifret talområde (spænder fra 51 til 55) eller et 4-cifret talinterval (spænder fra 2221 til 2720).
    • Hvis strengen starter med et 2-cifret talområde (fra 51 til 55), skal de næste 14 cifre være et tal mellem 0 og 9.
    • Hvis strengen starter med et 4-cifret talområde (fra 2221 til 2720), skal de næste 12 cifre være et tal mellem 0 og 9.

Følgende regex opfylder ovenstående betingelser 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 tryg ved ovenstående udtryk, så tjek ud en begynderguide til regulære udtryk først.

Du kan bruge ovenstående regex til at validere Mastercard-nummeret på et hvilket som helst programmeringssprog. Sådan gør du det i Python:

importere vedr

defcheckMasterCardNr(kort nej):
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 (vedr.Søg(r, kort nej)):
Print("Gyldig")
andet:
Print("Ikke gyldig")

kort1 = "5110762060017101"
checkMasterCardNo (kort1)

kort2 = "8632458236982734"
checkMasterCardNo (kort2)

Hvis du kører denne kode, bekræftes det, at det første tal er gyldigt, men at det andet ikke er:

RegEx for at validere Visa-kortnummer

Et Visa-kortnummer er gyldigt, hvis det opfylder følgende betingelser:

  1. Strengen må ikke indeholde specialtegn, alfabeter eller mellemrum.
  2. Strengen skal starte med 4.
  3. Antallet af tegn skal være lig med 13 eller 16. De gamle visa-kort har 13 tegn, og de nye har 16 tegn.
    • Hvis antallet af tegn er lig med 13, skal de sidste 12 cifre være et tal mellem 0 og 9.
    • Hvis antallet af tegn er lig med 16, skal de sidste 15 cifre være et tal mellem 0 og 9.

Følgende regex opfylder ovenstående betingelser, og du kan bruge det til at validere et Visa-kortnummer:

^4[0-9]{12}(?:[0-9]{3})?$

Nedenfor er Python-tilgangen til at validere et Visa-kortnummer:

importere vedr

defcheckVisaCardNo(kort nej):
regex = "^4[0-9]{12}(?:[0-9]{3})?$"
r = re.compile (regex)

hvis (vedr.Søg(r, kort nej)):
Print("Gyldig")
andet:
Print("Ikke gyldig")

kort1 = "4539890694174109"
checkVisaCardNo (kort1)

kort2 = "49237429498"
checkVisaCardNo (kort2)

Igen bekræfter output, at det første tal er gyldigt, mens det andet er ugyldigt:

RegEx for at validere American Express-kortnummer

Et American Express-kortnummer er gyldigt, hvis det opfylder følgende betingelser:

  1. Strengen må ikke indeholde specialtegn, alfabeter eller mellemrum.
  2. Dette antal tegn skal være lig med 15.
  3. Strengen skal starte med 34 eller 37.
  4. De sidste 13 cifre skal være et tal mellem 0 og 9.

Følgende regex opfylder ovenstående betingelser, og du kan bruge det til at validere et American Express-kortnummer:

^3[47][0-9]{13}$

Du kan validere et American Express Card-nummer ved at bruge følgende Python-kode:

importere vedr

defcheckAmericanExpressCardNo(kort nej):
regex = "^3[47][0-9]{13}$"
r = re.compile (regex)

hvis (vedr.Søg(r, kort nej)):
Print("Gyldig")
andet:
Print("Ikke gyldig")

kort1 = "372831730491196"
checkAmericanExpressCardNo (kort1)

kort2 = "84732593847743042"
checkAmericanExpressCardNo (kort2)

Endnu en gang bekræfter outputtet, at det første tal er gyldigt, men det andet er ugyldigt:

Anvendelser af regulære udtryk

Du kan bruge nogle ret simple regex til at validere almindelige kreditkortnumre. RegEx er et kraftfuldt værktøj, som du kan bruge til dataforbehandling, mønstermatchning, dataudtræk, leksikalsk analyse, naturlig sprogbehandling, web-skrabning og mere. Du kan også bruge regulære udtryk i webudvikling til at håndtere validering af HTML-formularer.