如何检查数字是否每4位有间隙或破折号?我有一个信用卡程序。信用卡有16位数字,可以是:
1234567890987612
或1234-5678-1234-5678
或1234 1234 5678 5678
。
如果信用卡只有这种形式,程序必须输出true。有人可以给我一个快速简便的方法吗?直到现在我做到了:
if len(creditcard)==16 and creditcard.isdigit()
......
答案 0 :(得分:1)
你想要的是一个正则表达式。查看regex
模块。我不是很擅长编写最有效的正则表达式,但是下面的表达式会匹配一个16位数字值和破折号分隔4个数字的组:
[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}
以下内容将匹配16位数字值与4个组之间的间隙
[0-9]{4}\s[0-9]{4}\s[0-9]{4}\s[0-9]{4}
以下将匹配16位数字值,没有间隙或空格
[0-9]{16}
您将使用regex
模块编译这些模式,然后将它们与您收到的输入进行比较,以验证您的输入是否符合其中一种模式。根据需要扩展模式,并学习编写自己的基本正则表达式 - 它们对于在文本中查找模式非常有用:)
编辑:如评论中所述,可以使用\ d匹配所有数字,而不是我使用的[0-9]{4}
方法,您可以编写\d{4}
。然后,测试边界可确保您不会匹配长度超过16位的序列。以上示例将匹配任意长的数字序列,但这样:
\b\d{4}\s\d{4}\s\d{4}\s\d{4}\b
我相信只会匹配一个16位数的序列(这里的主要区别是\b
与词边界相匹配)。