Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check for invalid input

I'm writing a program that will take a string as an input and check if the elements in it are valid or not. I want my input to only contain lower characters and periods, exclamation marks, and space and not an empty string. If the user enter an empty string or invalid character they will be asked to re-enter the string again:

I know how to check for a character in a string. I use this method

alpha ="abcdefghijklmnopqrstuvwxyz"
message= input("Enter message: ")
for i in message:
   if i in alpha:
      print i

Usually I will use the method below to check for invalid input, but it will not work for this case if I want to check for a character in a string. I can only use this to check if the message is empty

textOK = False
while not textOK:
        message= input(prompt)
        if len(message) == 0:
          print("Message is empty)
        else:
          textOK= True

This will re prompt the user whenever they input an empty string. I have no idea how to combine the two method. In short, I want to check if my input only contains lower letters,periods, exclamation marks, and space. If it contains other special characters or numbers or is an empty string, user will be prompt to enter the message again. Please help!!

like image 292
K.U Avatar asked Jul 10 '16 14:07

K.U


People also ask

How do you check for invalid inputs in Python?

You can use a set of allowed chars checking if the set is a superset of the string entered: allowed = set("abcdefghijklmnopqrstuvwxyz! .") while True: message = input("Enter message: ") if message and allowed. issuperset(message): # do whatever break print("Invalid characters entered! ")

What is the invalid input data?

The error "Invalid input found" usually means that the request payload has invalid data.

How do I Reprompt a user in Python?

To re-prompt a user, add a conditional statement to the beginning of your if block to check if the user-input is an empty string ( "" ). If it is, just ask them for their input again.


2 Answers

You can use a set of allowed chars checking if the set is a superset of the string entered:

allowed = set("abcdefghijklmnopqrstuvwxyz! .")

while True:
    message = input("Enter message: ")

    if message and allowed.issuperset(message):
        # do whatever
        break
    print("Invalid characters entered!")

It will only allow what is in allowed:

In [19]: message = "foobar!!$ "

In [20]:  message and allowed.issuperset(message)
Out[20]: False

In [21]: message = "foobar!! "

In [22]:  message and allowed.issuperset(message)
Out[22]: True

In [23]: message = ""

In [24]: bool( message and allowed.issuperset(message))
Out[24]: False

You can also use all()...:

while True:
    message = input("Enter message: ")
    if message and all(ch in allowed for ch in message):
        print("ok")
        break
    print("Invalid characters entered!)

If you want to output the bad chars:

while True:
    message = input("Enter message: ")
    if message and all(ch in allowed for ch in message):
        print("ok")
        break
    print("The following invalid character(s) were entered! {}"
          .format(" ".join(set(message)- allowed)))
like image 62
Padraic Cunningham Avatar answered Sep 19 '22 06:09

Padraic Cunningham


import re
while True:
    txt = input('Enter message: ').strip()
    if re.match(r'^[a-z\. !]+$', txt):
        break

    print('Mistakes:', re.findall(r'[^a-z\. !]', txt))

print('correct!')
like image 27
Szabolcs Dombi Avatar answered Sep 18 '22 06:09

Szabolcs Dombi