我有一个用户输入他的用户名,我只希望通过有效的字符串,这意味着只有 [a-zA-Z0-9] 中的字符。我对python很陌生,不确定语法。
这是我想要的代码示例,即检查用户名并在非法字符时返回 false。:
def _checkInput(input):
for char in input:
if !(char in [a-zA-Z0-9]):
return False
return True
谢谢!
我有一个用户输入他的用户名,我只希望通过有效的字符串,这意味着只有 [a-zA-Z0-9] 中的字符。我对python很陌生,不确定语法。
这是我想要的代码示例,即检查用户名并在非法字符时返回 false。:
def _checkInput(input):
for char in input:
if !(char in [a-zA-Z0-9]):
return False
return True
谢谢!
字符串中有一个方法叫做isalnum. 它可以实现您想要实现的目标。
In [7]: 'ab123fd'.isalnum()
Out[7]: True
In [8]: 'ab123fd **'.isalnum()
Out[8]: False
你需要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
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
如上例所示,字母和数字被认为是字母数字,但空格和标点符号不是。
另请注意,与纯数学相反,空字符串不被视为字母数字。但是,在大多数情况下,这实际上是您需要的,当然也是您需要的,因为长度为零的用户名没有多大意义。
这非常接近于 Python:
def _checkInput(input):
for c in input:
if not (c in string.ascii_letters or c in string.digits):
return False
return True
这也可以用正则表达式解决,但上面的可能更清晰,更简单。
您可以使用正则表达式轻松检查输入字符串:
>>> import re
>>> s = getinput()
>>> if not re.match(r'^[a-zA-Z0-9]+$', s)
... print "bad input"
如果空字符串也是有效输入,则使用*代替。+
正如其他答案中所建议的那样,使用isalnum也是一种不错的方法,但是使用正则表达式,您可以轻松地调整检查,以防输入要求变得更加复杂。
实现此目的的一种方法是使用 Python 的正则表达式模块。它是一个标准库。
import re
_pmatcher = re.compile(r'[0-9a-zA-Z]*$')
def _checkInput(input):
return _pmatcher.match(input)
字符串前面的 r 不是拼写错误,它是将字符串视为原始字符串,而不是输入转义字符。
您可以参考此Python 2.7 文档(或您选择的 Python 版本)
您将来可能需要验证字符串的所有字符是否都存在于特定列表中。
没有正则表达式,可能是这样的:
ch = 'becdi30!&'
okchars = 'abcdefghijk012345,;:!&-'
print all(c in okchars for c in ch)
结果
True