关于验证:在Python中,有没有办法以某种格式验证用户输入?

In Python, is there a way to validate a user input in a certain format?

本问题已经有最佳答案,请猛点这里访问。

在python中,我要求用户输入一个办公代码位置,该位置的格式应该是:x x-x x x(其中x是字母)。

我如何确保他们的输入遵循格式,如果不要求他们再次输入办公室代码?

谢谢!


实现这一点的标准(和语言不可知论)方法是使用正则表达式:

1
2
3
import re

re.match('^[0-9]{2}-[0-9]{3}$', some_text)

上面的示例返回True(实际上是一个"truthy"返回值,但是如果文本包含2个数字、一个连字符和3个其他数字,则可以假设它是True。下面是上面的regex分解为各个部分:

1
2
3
4
5
6
7
^     # marks the start of the string
[0-9] # any character between 0 and 9, basically one of 0123456789
{2}   # two times
-     # a hyphen
[0-9] # another character between 0 and 9
{3}   # three times
$     # end of string

我建议你多读一些正则表达式(或者re,或者regex,或者regexp,不管你怎么称呼它),它们是程序员的瑞士军刀。


在这种情况下,可以使用正则表达式:

1
2
3
4
5
6
import re
while True:
   inp = input() # raw_input in Python 2.x
   if re.match(r'[a-zA-Z0-9]{2}-[a-zA-Z0-9]{3}$', inp):
       return inp
   print('Invalid office code, please enter again:')

注意,在许多其他情况下,您可以简单地尝试将输入转换为内部表示。例如,当输入为数字时,代码应如下所示:

1
2
3
4
5
6
def readNumber():
    while True:
        try:
          return int(input()) # raw_input in Python 2.x
        except ValueError:
          pass