我正在尝试允许用户输入字母数字、下划线和空格作为名称。 我一直在使用 if not re.search(r'^[\w-]+$', name): 检查名称是否包含字母数字、下划线和空格以外的任何内容。但是这里我只能输入一个词,不能输入多个。我做错了什么?
请您参考如下方法:
你没有做任何明显错误的事情。您的问题也不完全清楚,所以我将尝试解决几个可能的问题。
为什么正则表达式只接受一个词?
在你的正则表达式中,你有 \w,根据 re documentation , 只是字母数字字符和下划线。您不包含的是空格字符,因此任何带有空格的名称(包括分隔名字和姓氏的名称)都将与您的正则表达式匹配,因此变为 False 由 不是 。您应该如何检查是否有任何非字母数字字符/下划线/空格如下:
if not re.search(r'^[\w- ]+$', name):
或者,如果您出于某种原因还担心换行符 (\n) 或制表符 (\t) 和其他类型的空格:
if not re.search(r'^[\w\s- ]+$', name):
为什么我一次只能检查一个名字?
那是因为正则表达式一次只会搜索一个字符串。如果你想让它检查多个名字,你应该对每个名字运行正则表达式,格式如下:
# assuming name_list is a list of name strings
for name in name_list:
if not re.search(r'^[\w- ]+$', name):
# do whatever
