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 re
input_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 re
input_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
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')
#abcd
custom_input('abc d')
#Characters other than "a"-"z" are found
custom_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 wrapper
custom_input = input_wrapper(input)
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.