2

我有一个用户输入他的用户名,我只希望通过有效的字符串,这意味着只有 [a-zA-Z0-9] 中的字符。我对python很陌生,不确定语法。

这是我想要的代码示例,即检查用户名并在非法字符时返回 false。:

def _checkInput(input):
     for char in input:
          if !(char in [a-zA-Z0-9]):
               return False
     return True

谢谢!

4

7 回答 7

5

字符串中有一个方法叫做isalnum. 它可以实现您想要实现的目标。

In [7]: 'ab123fd'.isalnum()
Out[7]: True

In [8]: 'ab123fd **'.isalnum()
Out[8]: False
于 2011-02-23T10:42:33.313 回答
4

你需要isalnum

>>> name = raw_input('Enter your name: ')
Enter your name: foo_bar
>>> name.isalnum()
False
>>> name = raw_input('Enter your name: ')
Enter your name: foobar
>>> name.isalnum()
True
于 2011-02-23T10:43:46.183 回答
4

Python 字符串有很多有用的方法来进行这种检查,例如:

  • str.isalnum()
  • str.isalpha()
  • str.isdigit()
  • str.islower()
  • str.istitle()
  • str.isupper()

您需要的是str.isalnum(),如果字符串中的所有字符都是字母数字并且至少有一个字符,则返回 true。

>>> 'hello1'.isalnum()
True
>>> 'hello 1'.isalnum()
False
>>> 'hello!'.isalnum()
False
>>> ''.isalnum()
False

如上例所示,字母和数字被认为是字母数字,但空格和标点符号不是。

另请注意,与纯数学相反,空字符串不被视为字母数字。但是,在大多数情况下,这实际上是您需要的,当然也是您需要的,因为长度为零的用户名没有多大意义。

于 2011-02-23T11:02:26.200 回答
0

这非常接近于 Python:

def _checkInput(input):
     for c in input:
          if not (c in string.ascii_letters or c in string.digits):
               return False
     return True

这也可以用正则表达式解决,但上面的可能更清晰,更简单。

于 2011-02-23T10:43:43.500 回答
0

您可以使用正则表达式轻松检查输入字符串:

>>> import re
>>> s = getinput()
>>> if not re.match(r'^[a-zA-Z0-9]+$', s)
...     print "bad input"

如果空字符串也是有效输入,则使用*代替。+

正如其他答案中所建议的那样,使用isalnum也是一种不错的方法,但是使用正则表达式,您可以轻松地调整检查,以防输入要求变得更加复杂。

于 2011-02-23T10:45:16.153 回答
0

实现此目的的一种方法是使用 Python 的正则表达式模块。它是一个标准库。

import re

_pmatcher = re.compile(r'[0-9a-zA-Z]*$')
def _checkInput(input):
    return _pmatcher.match(input)

字符串前面的 r 不是拼写错误,它是将字符串视为原始字符串,而不是输入转义字符。

您可以参考此Python 2.7 文档(或您选择的 Python 版本)

于 2011-02-23T11:01:24.393 回答
0

您将来可能需要验证字符串的所有字符是否都存在于特定列表中。

没有正则表达式,可能是这样的:

ch = 'becdi30!&'

okchars = 'abcdefghijk012345,;:!&-'

print all(c in okchars for c in ch)

结果

True
于 2011-02-23T12:20:42.873 回答