您可以使用replace
字符串的方法来摆脱空格,然后使用该isalpha()
方法。
一个例子:
>>> def get_name():
... name = raw_input('name: ') # use a simple "input" in python3
... if not name.replace(' ', '').isalpha():
... print('Bad name!!!')
... else:
... print('Good name!')
...
>>> get_name()
name: My name
Good name!
>>> get_name()
name: Bad Nam3
Bad name!!!
>>> get_name()
name: Jon Skeet
Good name!
请注意,这也适用于 python3 中的非 ascii 字母:
#python3
>>> get_name()
name: Accented è
Good name!
>>> get_name()
name: Bad Nam3
Bad name!!!
正则表达式对于这个简单的任务来说太复杂了。也因为使用[A-Za-z ]+
或类似不会匹配具有非 ASCII 字母的名称。并使用\w
包括数字。
如果您不想匹配非 ASCII 字母(例如“è”),那么您可以尝试以下操作:
>>> def get_name():
... name = raw_input('name: ') #input in python3
... try:
... name.encode('ascii')
... except UnicodeDecodeError:
... print('Bad name!!!')
... return
... if not name.replace(' ', '').isalpha():
... print('Bad name!!!')
... else:
... print('Good name!')
...
>>> get_name()
name: Accented è
Bad name!!!
>>> get_name()
name: The nam3
Bad name!!!
>>> get_name()
name: Guido Van Rossum
Good name!
最后,另一种检查方法是:
>>> import string
>>> def good_name(name):
... return not set(name).difference(string.letters + ' ')
...
>>> good_name('Guivo Van Rossum')
True
>>> good_name('Bad Nam3')
False
你可以这样使用它:
name = raw_input('name: ') #input in python3
if good_name(name):
#stuff for valid names
else:
#stuff for invalid names