Регулярният израз е поредица от знаци, която образува модел за търсене. Регулярните изрази се използват главно за търсене, валидиране и трансформиране на текстове или низове.
Научете как да валидирате номера на кредитни карти като Mastercard, Visa Card и American Express с регулярни изрази.
Кога да използвате RegEx за валидиране на номер на кредитна карта?
Услугите на трети страни таксуват за всеки опит за транзакция. Независимо дали транзакцията е успешна или не, трябва да платите таксите. В такива случаи искате да отхвърлите номера на кредитни карти, които са очевидно невалидни. Можете бързо да потвърдите номера на кредитни карти с помощта на регулярни изрази.
Но не можете напълно да разчитате на валидиране на регулярен израз за вашата функция за плащане. Издателите на карти редовно променят моделите на номерата на картите си (въвеждайки нови модели или изтегляйки стари), така че методът на regex не е най-стабилното решение. Въпреки че можете да опитате да следите моделите на карти от източник като Уикипедия който се актуализира често.
Можете също да използвате регулярен израз, за да намерите бързо марката на картата, която след това можете да използвате за показване на лога или етикети.
Регулярните изрази имат няколко случая на практическа употреба. Командата grep на Linux е може би най-често срещаният случай на практическа употреба на regex.
Кодът, използван в този проект, е наличен в a GitHub хранилище и е безплатен за използване под лиценза на MIT.
RegEx за валидиране на номера на Mastercard
Номерът на Mastercard е валиден, ако отговаря на следните условия:
- Низът не трябва да съдържа специални знаци, букви или бели интервали.
- Броят на знаците трябва да е равен на 16.
- Низът трябва да започва или с 2-цифрен диапазон от числа (вариращи от 51 до 55) или с 4-цифрен диапазон от числа (вариращи от 2221 до 2720).
- Ако низът започва с двуцифрен диапазон от числа (от 51 до 55), следващите 14 цифри трябва да са число между 0 и 9.
- Ако низът започва с 4-цифрен диапазон от числа (от 2221 до 2720), следващите 12 цифри трябва да са число между 0 и 9.
Следният регулярен израз отговаря на горните условия и може да потвърди номер на 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}$
Ако не ви харесва горният израз, проверете ръководство за начинаещи за регулярни изрази първи.
Можете да използвате горния регулярен израз, за да потвърдите номера на Mastercard на всеки език за програмиране. Ето как да го направите в Python:
импортиране повторно
дефcheckMasterCardNo(номер на карта):
регулярен израз = "^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)ако (повторно.Търсене(r, номер на карта)):
печат ("Валиден")
друго:
печат ("Не важи")карта1 = "5110762060017101"
checkMasterCardNo (card1)
карта2 = "8632458236982734"
checkMasterCardNo (card2)
Изпълнението на този код ще потвърди, че първото число е валидно, но второто не е:
RegEx за валидиране на номера на карта Visa
Номер на карта Visa е валиден, ако отговаря на следните условия:
- Низът не трябва да съдържа специални знаци, букви или бели интервали.
- Низът трябва да започва с 4.
- Броят на знаците трябва да бъде равен на 13 или 16. Старите виза карти са с 13 символа, а новите са с 16 знака.
- Ако броят на знаците е равен на 13, последните 12 цифри трябва да са число между 0 и 9.
- Ако броят на знаците е равен на 16, последните 15 цифри трябва да са число между 0 и 9.
Следният регулярен израз отговаря на горните условия и можете да го използвате за валидиране на номер на карта Visa:
^4[0-9]{12}(?:[0-9]{3})?$
По-долу е подходът на Python за валидиране на номер на карта Visa:
импортиране повторно
дефпроверете VisaCardNo(номер на карта):
регулярен израз = "^4[0-9]{12}(?:[0-9]{3})?$"
r = re.compile (regex)ако (повторно.Търсене(r, номер на карта)):
печат ("Валиден")
друго:
печат ("Не важи")карта1 = "4539890694174109"
checkVisaCardNo (карта1)
карта2 = "49237429498"
checkVisaCardNo (карта2)
Отново изходът потвърждава, че първото число е валидно, докато второто е невалидно:
RegEx за валидиране на номера на карта American Express
Номерът на карта American Express е валиден, ако отговаря на следните условия:
- Низът не трябва да съдържа специални знаци, букви или бели интервали.
- Този брой знаци трябва да е равен на 15.
- Низът трябва да започва с 34 или 37.
- Последните 13 цифри трябва да са число между 0 и 9.
Следният регулярен израз отговаря на горните условия и можете да го използвате за валидиране на номер на карта American Express:
^3[47][0-9]{13}$
Можете да потвърдите номер на карта American Express, като използвате следния код на Python:
импортиране повторно
дефcheckAmericanExpressCardNo(номер на карта):
регулярен израз = "^3[47][0-9]{13}$"
r = re.compile (regex)ако (повторно.Търсене(r, номер на карта)):
печат ("Валиден")
друго:
печат ("Не важи")карта1 = "372831730491196"
checkAmericanExpressCardNo (карта1)
карта2 = "84732593847743042"
checkAmericanExpressCardNo (карта2)
Още веднъж изходът потвърждава, че първото число е валидно, но второто е невалидно:
Приложения на регулярни изрази
Можете да използвате някои доста прости регулярни изрази, за да потвърдите общи номера на кредитни карти. RegEx е мощен инструмент, който можете да използвате за предварителна обработка на данни, съвпадение на шаблони, извличане на данни, лексикален анализ, обработка на естествен език, уеб скрапинг и др. Можете също да използвате регулярни изрази в уеб разработката, за да управлявате валидирането на HTML формуляри.