限制Python输入字符串的字符和长度

18

我刚开始学习我的第一个真正的编程语言Python。我想知道如何限制raw_input中的用户输入仅包含某些字符和长度限制。例如,如果用户输入的字符串除了字母a-z以外还包含其他内容,我想显示一个错误消息;如果用户输入的字符超过15个字符,我想显示另一个错误消息。

第一个问题似乎可以用正则表达式解决,因为我在JavaScript中使用过它们,但我不确定如何在Python中使用它们。第二个问题,我不知道该如何处理。有谁能帮忙吗?

5个回答

21

问题1:限制特定字符

你说得没错,这很容易用正则表达式解决:

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()

问题2:限制字符串长度

正如Tim正确提到的那样,你可以通过修改第一个示例中的正则表达式以仅允许一定数量的字符来实现此目的。你也可以像这样手动检查字符串的长度:

input_str = raw_input("Please provide some info: ")
if len(input_str) > 15:
    print "Error! Only 15 characters allowed!"
    sys.exit()

或者将两者合并:

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

15

正则表达式还可以限制字符的数量。

r = re.compile("^[a-z]{1,15}$")

提供一个正则表达式,只匹配由1至15个全小写ASCII字母组成的输入。


3
我们可以在这里使用assert
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

你可以编写一个input函数的包装器。

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)

0
if any( [ i>'z' or i<'a' for i in raw_input]):
    print "Error: Contains illegal characters"
elif len(raw_input)>15:
    print "Very long string"

0
可能你可以通过导入字符串来验证字符串的类型。
def enter_sentence():
condition = False
while not condition:
    sentence = input('Enter a sentence please: ').lower()
    lower_check_list = list(string.ascii_lowercase + ' ')
    for letter in sentence:
        if letter not in lower_check_list:
            print('Enter only a letter characters.Try again')
            break
    else:
        if len(sentence) > 15:
            print('The maximum number of characters is 14. Try again')
        else:
            condition = True

return 'Your sentence has been verified and complies'



print(enter_sentence())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接