Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python - Validation to ensure input only contains characters A-Z

I'm creating a program in Python 3.x where it asks the user for their first name and then last name and stores these in variables which are then concatenated into one variable:

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

I tried:

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.")

which ensures that a string is inputted, but inputting 'bob38', '74' or '][;p/' all count as string values, so these would be accepted, which is not what I want to happen.

I want valid input to only contain the letters A-Z/a-z (both uppercase and lowercase), and if the input contains anything else, an error message is outputted (e.g. 'That's invalid, try again.') and the user is asked the question again. How would I do this?

like image 837
BobZeBuilder Avatar asked Mar 09 '26 05:03

BobZeBuilder


2 Answers

What you want to do is actually check if your string is not isalpha() and output an error and continue your loop until you get a valid entry.

So, to give you an idea, here is a simple example:

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

print(name)

Note, that as mentioned in the comments to this question, this is limited to only names that contain letters. There are several valid names that will contain ' and - that should probably be considered when wanting to validate names.

like image 97
idjaw Avatar answered Mar 11 '26 19:03

idjaw


There is another solution. It's not as efficient as using re or isalpha but allows you to easily customize the characters you allow:

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.")

The all checks if all characters from firstName are contained in the valid_characters string and returns False if any of them is not in it.

So to add whitespace and minus - you can alter it slightly:

valid_characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ -'
#                      whitespace is here ------------------------------^
like image 35
MSeifert Avatar answered Mar 11 '26 17:03

MSeifert



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!