29

我正在验证用户输入的文本,以便它只接受字母而不接受数字。到目前为止,当我输入一个数字(例如 56)时,我的代码工作正常,它警告我我应该只输入字母,而当我输入字母时它不会返回任何内容(就像它应该做的那样)。我的问题是当我开始输入字母后跟数字时它会接受它,例如(s45)。它的作用是接受第一个字母,但不接受整个字符串。我需要它来接受整个字符串。

def letterCheck(aString):
    if len(aString) > 0:
        if re.match("[a-zA-Z]", aString) != None:
            return ""
    return "Enter letters only"
4

4 回答 4

54

将其锚定到开头和结尾,并匹配一个或多个字符:

if re.match("^[a-zA-Z]+$", aString):

这里^锚定到字符串的开头和$结尾,并+确保匹配 1 个或多个字符。

不过,您最好还是使用str.isalpha()它。无需在这里使用沉重的正则表达式锤子:

>>> 'foobar'.isalpha()
True
>>> 'foobar42'.isalpha()
False
>>> ''.isalpha()
False
于 2013-04-11T17:02:42.443 回答
5

在您的正则表达式 + 原始字符串中使用边界来编码正则表达式,如下所示:

r"^[a-zA-Z]+$"
于 2013-04-11T17:02:25.393 回答
3

您可以考虑在字符串上使用 isalpha() 。如果字符串只包含字母字符,则返回 true,否则返回 false。

if aString.isalpha():
   do something
else:
   handle input error
于 2013-04-11T17:07:05.347 回答
0

如果您要寻找漂亮的 Pythonic 作品,请选择 isalpha 和 isdecimal :

str = u"23443434";
print str.isdecimal();
于 2014-05-22T08:26:38.790 回答