-2

我需要使用 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
4

2 回答 2

7

您的正则表达式中需要边界标记。但是,我在这里只使用一个模式:

def card_range(cardNumber):
    return re.search(r'^[0-9]{13,19}$', cardNumber)

顺便说一句,主要信用卡提供商的正则表达式很容易获得,例如这里

于 2021-09-06T04:34:55.907 回答
1

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'))
于 2021-09-06T04:38:41.643 回答