Python - 验证以确保输入仅包含字符A-Z

时间:2016-04-05 17:16:06

标签: python validation

我正在Python 3.x中创建一个程序,它要求用户输入他们的名字和姓氏,然后将这些存储在变量中,然后将这些变量连接成一个变量:

firstName = input("What's your first name? ")
lastName = input("What's your first name? ")
name = firstName + " " + lastName

我试过了:

while True:
    try:
        firstName = input("What's your first name? ")
        lastName = input("What's your first name? ")
        name = firstName + " " + lastName
        break
    except ValueError:
        print("That's invalid, please try again.")

确保输入字符串,但输入'bob38','74'或'] [; p /'都计为字符串值,因此这些将被接受,这不是我想要发生的。< / p>

我希望有效输入只包含字母AZ / az(大写和小写),如果输入包含其他内容,则输出错误消息(例如'那是无效的,再试一次'。)用户是再次问了这个问题。我该怎么做?

4 个答案:

答案 0 :(得分:4)

您要做的是实际检查您的字符串是否不是isalpha()并输出错误并继续循环直到您获得有效的条目。

所以,为了给你一个想法,这是一个简单的例子:

while True:
    name = input("input name")
    if name.isalpha():
        break
    print("Please enter characters A-Z only")

print(name)

请注意,正如此问题的评论中所述,这仅限于包含字母的名称。有几个有效的名称将包含'-,在想要验证名称时应该考虑这些名称。

答案 1 :(得分:2)

assert all('a'<=letter<='z' or 'A'<= letter <= 'Z' for letter in name)

如果name包含非字母字母,则会抛出错误。

答案 2 :(得分:2)

还有另一种解决方案。它不如使用reisalpha有效,但允许您轻松自定义您允许的字符:

valid_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
# Just insert other characters into that string if you want to accept anything else.

while True:
    firstName = input("What's your first name? ")
    if all(char in valid_characters for char in firstName):
        break
    print("That's invalid, please try again.")

all检查来自firstName的所有字符是否包含在valid_characters字符串中,如果其中任何字符不在其中,则返回False

因此,要添加空格和减去-,您可以稍微更改一下:

valid_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ -'
#                      whitespace is here ------------------------------^

答案 3 :(得分:1)

您可以使用简单的正则表达式 -

import re
is_valid_name = r'[a-zA-Z]+'

if bool(re.match(firstName, is_valid_name)) and bool(re.match(lastName, is_valid_name)):
   name = firstName + lastName
else:
    print('thats invalid')