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