#python #regex
Вопрос:
Мне нужно проверить число с помощью регулярного выражения Python, но это не работает.
Приведенный ниже код представляет собой библиотеку, которая используется другим файлом. На данный момент я только пытаюсь сделать так, чтобы входные данные были единственными числами между 13 и 19 цифрами. Диапазон работает просто отлично, но когда я вставляю букву во входные данные, она печатает ее, вместо того, чтобы выводить «Недопустимую» строку:
"""
Credit card number validation and provider check
"""
import re
def card_range(cardNumber):
"""
Checks the credit card number length
"""
if len(cardNumber) < 13:
return "Invalid"
if len(cardNumber) > 19:
return "Invalid"
pattern = re.compile("[0-9] ")
if not pattern.match(cardNumber):
return "Invalid"
return cardNumber
Ответ №1:
Вам нужны маркеры границ в вашем регулярном выражении. Но я бы просто использовал здесь один шаблон:
def card_range(cardNumber):
return re.search(r'^[0-9]{13,19}
Кстати, регулярные выражения для основных поставщиков кредитных карт легко доступны, например, здесь.
Комментарии:
1. @vitoruggo Спасибо и добро пожаловать в Stack Overflow. Если этот ответ решил вашу проблему, пожалуйста, подумайте о том, чтобы принять его, нажав на зеленую галочку слева.
Ответ №2:
Почему бы просто не проверить с помощью isnumeric
метода, является ли строка числом? Похоже, это будет быстрее, чем решение с регулярным выражением, так как мы все равно просто хотим проверить номер.
def card_range(cardNumber):
"""
Checks the credit card number length
"""
if not cardNumber.isnumeric():
return 'Invalid! I need only NUMBERZ!'
if not 13 <= len(cardNumber) <= 19:
return "Invalid! The length check FAILED!"
return True
# Invalid! The length check FAILED!
print(card_range('1234567'))
# Invalid! I need only NUMBERZ!
print(card_range('a'))
# True
print(card_range('112233445566778899'))
# Invalid! I need only NUMBERZ!
print(card_range('1122334455x6778899'))
Комментарии:
1. Зачем импортировать
re
, если вы им не пользуетесь?2. это яркий пример copypasta .. мой плохой там
3. Я просто хочу использовать регулярное выражение, потому что это проект колледжа, и профессор ожидает, что мы будем его использовать. Я спрошу ее, можно ли использовать что-то более "продвинутое". Спасибо за подсказку!
4. ах, не беспокойтесь. В этом случае решение регулярных выражений должно быть идеальным для данного случая использования.
, cardNumber)
Кстати, регулярные выражения для основных поставщиков кредитных карт легко доступны, например, здесь.
Комментарии:
1. @vitoruggo Спасибо и добро пожаловать в Stack Overflow. Если этот ответ решил вашу проблему, пожалуйста, подумайте о том, чтобы принять его, нажав на зеленую галочку слева.
Ответ №2:
Почему бы просто не проверить с помощью isnumeric
метода, является ли строка числом? Похоже, это будет быстрее, чем решение с регулярным выражением, так как мы все равно просто хотим проверить номер.
Комментарии:
1. Зачем импортировать
re
, если вы им не пользуетесь?2. это яркий пример copypasta .. мой плохой там
3. Я просто хочу использовать регулярное выражение, потому что это проект колледжа, и профессор ожидает, что мы будем его использовать. Я спрошу ее, можно ли использовать что-то более «продвинутое». Спасибо за подсказку!
4. ах, не беспокойтесь. В этом случае решение регулярных выражений должно быть идеальным для данного случая использования.