Python代码使用正则表达式确保字符串是字母数字及. - _

8 投票
6 回答
17844 浏览
提问于 2025-04-15 20:51

我找了很久,还是没找到我需要的东西,虽然我觉得这应该很简单(不过我没有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(...) 就可以了。

撰写回答