Ett reguljärt uttryck är en sekvens av tecken som bildar ett sökmönster. Reguljära uttryck används främst för att söka, validera och transformera texter eller strängar.
Lär dig hur du validerar kreditkortsnummer som Mastercard, Visa Card och American Express med vanliga uttryck.
När ska man använda RegEx för att validera ett kreditkortsnummer?
Tredjepartstjänsterna tar betalt för varje transaktionsförsök. Oavsett om transaktionen är framgångsrik eller inte, måste du betala avgifterna. I sådana fall vill du neka kreditkortsnummer som är uppenbart ogiltiga. Du kan snabbt validera kreditkortsnummer med hjälp av reguljära uttryck.
Men du kan inte helt lita på validering av reguljära uttryck för din betalningsfunktion. Kortutgivare ändrar regelbundet sina kortnummermönster (inför nya mönster eller drar tillbaka gamla), så regexmetoden är inte den mest robusta lösningen. Även om du kan försöka hålla koll på kortmönster från en källa som Wikipedia som uppdateras ofta.
Du kan också använda regex för att snabbt hitta kortmärket som du sedan kan använda för att visa logotyper eller etiketter.
Reguljära uttryck har flera praktiska användningsfall. Kommandot Linux grep är förmodligen det vanligaste praktiska användningsfallet av regex.
Koden som används i detta projekt är tillgänglig i en GitHub-förråd och är gratis för dig att använda under MIT-licensen.
RegEx för att validera Mastercard-nummer
Ett Mastercard-nummer är giltigt om det uppfyller följande villkor:
- Strängen får inte innehålla några specialtecken, alfabet eller blanksteg.
- Antalet tecken måste vara lika med 16.
- Strängen bör börja med antingen ett 2-siffrigt nummerintervall (från 51 till 55) eller ett 4-siffrigt nummerintervall (från 2221 till 2720).
- Om strängen börjar med ett 2-siffrigt nummerområde (från 51 till 55), måste de nästa 14 siffrorna vara ett tal mellan 0 och 9.
- Om strängen börjar med ett 4-siffrigt nummerområde (från 2221 till 2720), måste de nästa 12 siffrorna vara ett tal mellan 0 och 9.
Följande regex uppfyller ovanstående villkor och kan validera ett 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}$
Om du inte är bekväm med uttrycket ovan, kolla in en nybörjarguide till reguljära uttryck först.
Du kan använda ovanstående regex för att validera Mastercard-numret på vilket programmeringsspråk som helst. Så här gör du det i Python:
importera re
defcheckMasterCardNo(kort nr):
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)om (re.Sök(r, kort nr)):
skriva ut("Giltig")
annan:
skriva ut("Inte giltig")kort1 = "5110762060017101"
checkMasterCardNo (kort1)
kort2 = "8632458236982734"
checkMasterCardNo (kort2)
Att köra den här koden kommer att bekräfta att det första numret är giltigt men att det andra inte är:
RegEx för att validera Visa-kortnummer
Ett Visa Card-nummer är giltigt om det uppfyller följande villkor:
- Strängen får inte innehålla några specialtecken, alfabet eller blanksteg.
- Strängen ska börja med 4.
- Antalet tecken måste vara lika med 13 eller 16. De gamla visa-korten har 13 tecken och de nya har 16 tecken.
- Om antalet tecken är lika med 13 måste de sista 12 siffrorna vara ett tal mellan 0 och 9.
- Om antalet tecken är lika med 16 måste de sista 15 siffrorna vara ett tal mellan 0 och 9.
Följande regex uppfyller ovanstående villkor och du kan använda det för att validera ett Visa-kortnummer:
^4[0-9]{12}(?:[0-9]{3})?$
Nedan är Python-metoden för att validera ett Visa Card-nummer:
importera re
defcheckVisaCardNo(kort nr):
regex = "^4[0-9]{12}(?:[0-9]{3})?$"
r = re.compile (regex)om (re.Sök(r, kort nr)):
skriva ut("Giltig")
annan:
skriva ut("Inte giltig")kort1 = "4539890694174109"
checkVisaCardNo (kort1)
kort2 = "49237429498"
checkVisaCardNo (kort2)
Återigen bekräftar utdata att det första numret är giltigt medan det andra är ogiltigt:
RegEx för att validera American Express-kortnummer
Ett American Express-kortnummer är giltigt om det uppfyller följande villkor:
- Strängen får inte innehålla några specialtecken, alfabet eller blanksteg.
- Antalet tecken måste vara lika med 15.
- Strängen ska börja med 34 eller 37.
- De sista 13 siffrorna måste vara ett tal mellan 0 och 9.
Följande regex uppfyller ovanstående villkor och du kan använda det för att validera ett American Express Card-nummer:
^3[47][0-9]{13}$
Du kan validera ett American Express Card-nummer med följande Python-kod:
importera re
defcheckAmericanExpressCardNo(kort nr):
regex = "^3[47][0-9]{13}$"
r = re.compile (regex)om (re.Sök(r, kort nr)):
skriva ut("Giltig")
annan:
skriva ut("Inte giltig")kort1 = "372831730491196"
checkAmericanExpressCardNo (kort1)
kort2 = "84732593847743042"
checkAmericanExpressCardNo (card2)
Än en gång bekräftar utgången att det första numret är giltigt, men det andra är ogiltigt:
Tillämpningar av reguljära uttryck
Du kan använda några ganska enkla regex för att validera vanliga kreditkortsnummer. RegEx är ett kraftfullt verktyg som du kan använda för förbearbetning av data, mönstermatchning, dataextraktion, lexikal analys, naturlig språkbehandling, webbskrapning och mer. Du kan också använda reguljära uttryck i webbutveckling för att hantera valideringen av HTML-formulär.