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

时间:2012-09-12 06:56:38

标签: python validation character

我正在编写一个程序,其中一部分需要输入一个名称。 名称只能是alpha和空格(例如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

有人可以填写?????以使该计划有效吗?

5 个答案:

答案 0 :(得分:3)

尝试isalpha()字符串方法。

由于此人将使用空格输入名称,因此您有两种选择:

  1. 按空格分割输入(使用split()
  2. 利用string.letters
  3. 例如:

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

    将其与' '相结合,以获取允许的字符列表。由于这是家庭作业,其余部分取决于你。

答案 1 :(得分:1)

您可以使用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

答案 2 :(得分:0)

您可能需要查看regular expressions

^[A-Za-z ]*$

是一个正则表达式,它只匹配字符串,如果它们完全由ASCII字母和空格组成。

还要允许当前语言环境的字母:

^[^\W\d_]*$

基本上是一组字母数字字符,包括重音字符(在当前语言环境中)减去数字和下划线。

答案 3 :(得分:0)

使用正则表达式,例如[A-Za-z ]+

如果我使用Tim的表达式,它会转化为这样的东西:

match = re.match(r'^[A-Za-z ]*$', name )
if match :
    print("Correct name");
else:
    print("Invalid chars");

答案 4 :(得分:-1)

要检查字符串是否为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