Limiting Python input strings to certain characters and lengths Limiting Python input strings to certain characters and lengths python python

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)