在Python中只允许字母字符?
我正在写一个程序,其中一部分需要输入一个名字。 名称只能是字母和空格(如John Smith),不能是John Smith 1 如果输入了无效字符,我需要程序显示错误消息并重新询问问题。除了验证,我什么都有。我猜是这样的在Python中只允许字母字符?,python,validation,character,Python,Validation,Character,我正在写一个程序,其中一部分需要输入一个名字。 名称只能是字母和空格(如John Smith),不能是John Smith 1 如果输入了无效字符,我需要程序显示错误消息并重新询问问题。除了验证,我什么都有。我猜是这样的 name = str(input("What is the customers name? ")) while True: if ??????????????????? : print("You have entered an invalid chara
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
有人可以填写??
s使程序正常工作吗?试试字符串法
由于此人将用空格输入姓名,因此您有两个选项:
string.letters
>>> import string
>>> string.letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
将其与''
组合以获得允许的字符列表。既然这是家庭作业,剩下的就看你了。试试字符串法
由于此人将用空格输入姓名,因此您有两个选项:
string.letters
>>> import string
>>> string.letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
将其与
''
组合以获得允许的字符列表。因为这是家庭作业,剩下的就看你了。你可能想看看:
仅当字符串完全由ASCII字母和空格组成时才匹配字符串的正则表达式
要同时允许使用当前区域设置的字母,请执行以下操作:
^[^\W\d_]*$
这基本上是一组字母数字字符,包括重音字符(在当前语言环境中)减去数字和下划线。您可能需要了解: 仅当字符串完全由ASCII字母和空格组成时才匹配字符串的正则表达式 要同时允许使用当前区域设置的字母,请执行以下操作:
^[^\W\d_]*$
它基本上是一组字母数字字符,包括重音字符(在当前语言环境中)减去数字和下划线。要检查字符串的字母,我通常使用这个字符。希望这能帮助你
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
重新导入
def是字母空间(名称):
name\u nospace=''.join((name.split()))
如果重新搜索(r“\W”,name_nospace)或len(name_nospace)<1:
返回错误
返回真值
name=“马克·祖姆科夫”
打印(是否为字母空格(名称))#正确
name=“Mark Zumkoff@”
打印(是否为字母空格(名称))#错误
name=“”
打印(是否为字母空格(名称))#错误
要检查字符串的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
重新导入
def是字母空间(名称):
name\u nospace=''.join((name.split()))
如果重新搜索(r“\W”,name_nospace)或len(name_nospace)<1:
返回错误
返回真值
name=“马克·祖姆科夫”
打印(是否为字母空格(名称))#正确
name=“Mark Zumkoff@”
打印(是否为字母空格(名称))#错误
name=“”
打印(是否为字母空格(名称))#错误
使用正则表达式,类似于[A-Za-z]+
如果我使用Tim的表达方式,它会转化成这样:
match = re.match(r'^[A-Za-z ]*$', name )
if match :
print("Correct name");
else:
print("Invalid chars");
使用正则表达式,比如
[A-Za-z]+
如果我使用Tim的表达方式,它会转化成这样:
match = re.match(r'^[A-Za-z ]*$', name )
if match :
print("Correct name");
else:
print("Invalid chars");
您可以使用字符串的
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
您可以使用字符串的
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
如果Tim O'Reilly试图使用您的程序,他将不会高兴。也不会毛澤東.@TimPietzcker我想这对提出作业的老师来说是个问题。我会在示例代码中使用if构造的while循环。它只需要简单。它不需要任何这些函数。老师不知道答案。如果Tim O'Reilly试图使用你的程序,他不会高兴的。也不会毛澤東.@TimPietzcker我想这对提出作业的老师来说是个问题。我会在示例代码中使用if构造的while循环。它只需要简单。它不需要任何这些函数。老师不知道答案。你能帮我把这个复制到我的代码里吗?我不知道放在哪里。我听说过isalpha()调用,但我不知道放在哪里。可以使用
replace(“,”)
代替split()
。因此,在OP示例中,您不应该使用“??”而应该使用“而不是_name.replace(“,”).isalpha()
,如果名称(不带空格)包含一些非字母字符,那么它是True
。我尝试过替换???使用非_name.replace(“,”).isalpha()并获取语法错误。您能帮我将其复制到我的代码中吗?我不知道放在哪里。我听说过isalpha()调用,但我不知道放在哪里。可以使用replace(“,”)
代替split()
。因此,在OP示例中,您不应该使用“??”而应该使用“而不是_name.replace(“,”).isalpha()
,如果名称(不带空格)包含一些非字母字符,那么它是True
。我尝试过替换???wi