[英]Allow Only Alpha Characters in Python?
我正在编写程序,其中一部分需要输入名称。 名称只能是字母和空格(例如John Smith),不能是John Smith1。如果输入了无效字符,我需要程序显示错误消息并提出问题。 除了验证外,我什么都有。 我猜是这样的吗?
name = str(input("What is the customers name? "))
while True:
if ??????????????????? :
print("You have entered an invalid character. Enter only name."
name = str(input("What is the customers name? "))
else:
break
可有人请填写?????
使程序正常工作?
您可以使用字符串的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
您可能需要研究正则表达式 :
^[A-Za-z ]*$
是一个正则表达式,仅当字符串完全由ASCII字母和空格组成时才匹配。
要也允许您当前语言环境的字母:
^[^\W\d_]*$
它基本上是字母数字字符集,包括带重音的字符(在当前区域设置中)减去数字和下划线。
使用正则表达式,例如[A-Za-z ]+
如果我使用Tim的表达式,它将转换为如下形式:
match = re.match(r'^[A-Za-z ]*$', name )
if match :
print("Correct name");
else:
print("Invalid chars");
要检查字符串是否为alpha,我通常使用此字符串。 希望这可以帮到你。
import re
def is_alpha_space(name):
name_nospace = ''.join((name.split()))
if re.search(r"\W", name_nospace) or len(name_nospace) < 1:
return False
return True
name = "Mark Zumkoff"
print(is_alpha_space(name)) # True
name = "Mark Zumkoff@"
print(is_alpha_space(name)) # False
name = " "
print(is_alpha_space(name)) # False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.