如何验证用户输入以限制它们仅输入字母字符? 我目前有这个while循环设置;
while True:
if message.isalpha():
print ("You have chosen to " + decision.lower() + " " + message.lower() + ".")
break
else:
message = input("Please enter the message you wish to " + decision.lower() + " in alphabetical characters only.")
但是,我要验证的消息可以包含空格,如果消息是仅包含字母字符的句子,则结果将返回false。
答案 0 :(得分:2)
使用正则表达式
import re
if re.search("^[a-zA-Z\s]+$", message):
print ("You have chosen to " + decision.lower() + " " + message.lower() + ".")
else:
message = input("Please enter the message you wish to " + decision.lower() + " in alphabetical characters only.")
说明:
函数re.search尝试在变量消息中查找模式。如果找到,则代码进入if子句。该模式由正则表达式“^ [a-zA-Z \ s] + $”定义。要理解,让我们分开表达式:
因为, az , AZ 和 \ s 位于括号 [] 内,这意味着 az 或 AZ 或 \ s 。使用 + ,我定义括号内的所有内容都可以出现一次或多次。因此,代码试图搜索出现一次或多次的小写,大写或空格。
答案 1 :(得分:1)
您可以使用set
:
import string
if set(message).issubset(string.ascii_lowercase + " "):
print "Good one"
您可以对这两种情况使用string.ascii_letters
等。
答案 2 :(得分:0)
经过测试,我最有效的方式(在时间方面)似乎删除了空格并使用str.isalpha
:
if 'my text'.replace(' ', '').isalpha():
print 'Good one'
Timings comparaison:
>>> # My answer:
>>> def test()
'my text'.replace(' ', '').isalpha()
>>> %timeit test()
1000000 loops, best of 3: 336 ns per loop
>>> # Stuart's answer:
>>> def test()
set(message).issubset(string.ascii_lowercase + " ")
>>> %timeit test()
100000 loops, best of 3: 2.17 us per loop
>>> # Yuri's answer:
>>> reg = re.compile("^[a-zA-Z\s]+$")
>>> def test()
reg.search('my text')
>>> %timeit test()
1000000 loops, best of 3: 504 ns per loop