Limiting Python input strings to certain characters and lengths
Question 1: Restrict to certain characters
You are right, this is easy to solve with regular expressions:
import reinput_str = raw_input("Please provide some info: ")if not re.match("^[a-z]*$", input_str): print "Error! Only letters a-z allowed!" sys.exit()
Question 2: Restrict to certain length
As Tim mentioned correctly, you can do this by adapting the regular expression in the first example to only allow a certain number of letters. You can also manually check the length like this:
input_str = raw_input("Please provide some info: ")if len(input_str) > 15: print "Error! Only 15 characters allowed!" sys.exit()
Or both in one:
import reinput_str = raw_input("Please provide some info: ")if not re.match("^[a-z]*$", input_str): print "Error! Only letters a-z allowed!" sys.exit()elif len(input_str) > 15: print "Error! Only 15 characters allowed!" sys.exit()print "Your input was:", input_str
Regexes can also limit the number of characters.
r = re.compile("^[a-z]{1,15}$")
gives you a regex that only matches if the input is entirely lowercase ASCII letters and 1 to 15 characters long.
We can use assert
here.
def custom_input(inp_str: str): try: assert len(inp_str) <= 15, print("More than 15 characters present") assert all("a" <= i <= "z" for i in inp_str), print( 'Characters other than "a"-"z" are found' ) return inp_str except Exception as e: pass
custom_input('abcd')#abcdcustom_input('abc d')#Characters other than "a"-"z" are foundcustom_input('abcdefghijklmnopqrst')#More than 15 characters present
You can build a wrapper around input
function.
def input_wrapper(input_func): def wrapper(*args, **kwargs): inp = input_func(*args, **kwargs) if len(inp) > 15: raise ValueError("Input length longer than 15") elif not inp.isalpha(): raise ValueError("Non-alphabets found") return inp return wrappercustom_input = input_wrapper(input)