如何在python中验证用户输入是字母还是空格?

时间:2015-02-19 16:36:07

标签: python

如何验证用户输入以限制它们仅输入字母字符? 我目前有这个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。

3 个答案:

答案 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] + $”定义。要理解,让我们分开表达式:

  • ^ 表示字符串的开头
  • a-z 表示从a到z(小写)
  • 的任何字符
  • A-Z 表示从A到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