Python代码使用正则表达式确保字符串是字母数字及. - _
我找了很久,还是没找到我需要的东西,虽然我觉得这应该很简单(不过我没有Python的经验)。
给定一个字符串,我想在Python中验证它是否只包含字母和数字,也就是:a-zA-Z0-9
以及 .
_
-
这些符号。
举个例子:
可以接受的:
bill-gates
Steve_Jobs
Micro.soft
不可以接受的:
Bill gates
-- 不允许有空格
me@host.com
-- @ 不是字母或数字
我尝试使用:
if re.match("^[a-zA-Z0-9_.-]+$", username) == True:
但这似乎没有解决问题……
6 个回答
2
也可以稍微缩短一下:
if re.match(r'^[\w.-]+$', username):
5
在比较的时候,千万不要用 == True
或 == False
。很多类型本身就有对应的布尔值(真或假),你应该直接使用这些布尔值来进行比较:
if re.match("^[a-zA-Z0-9_.-]+$", username):
22
re.match
这个函数不是返回一个真或假的值,而是如果匹配成功,它会返回一个叫做 MatchObject
的对象;如果没有匹配成功,它会返回 None
。
>>> re.match("^[a-zA-Z0-9_.-]+$", "hello")
<_sre.SRE_Match object at 0xb7600250>
>>> re.match("^[a-zA-Z0-9_.-]+$", " ")
>>> print re.match("^[a-zA-Z0-9_.-]+$", " ")
None
所以,你不应该写 re.match(...) == True
这样的代码;正确的做法是检查 re.match(...) is not None
。其实可以更简单,直接用 if re.match(...)
就可以了。