繁体   English   中英

在Python中只允许使用Alpha字符吗?

[英]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

可有人请填写????? 使程序正常工作?

尝试使用字符串的isalpha()方法。

由于此人将输入带空格的姓名,因此您有两个选择:

  1. 按空格分隔输入(使用split()
  2. 利用string.letters

例如:

   >>> import string
   >>> string.letters
   'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

将其与' '以获取允许的字符列表。 由于这是家庭作业,其余的工作由您自己决定。

您可以使用字符串的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM