Python code to use a regular expression to make sure a string is alphanumeric plus . - _

Warlax picture Warlax · Mar 25, 2010 · Viewed 13.5k times · Source

I looked and searched and couldn't find what I needed although I think it should be simple (if you have any Python experience, which I don't).

Given a string, I want to verify, in Python, that it contains ONLY alphanumeric characters: a-zA-Z0-9 and . _ -

examples:

Accepted:

bill-gates

Steve_Jobs

Micro.soft

Rejected:

Bill gates -- no spaces allowed

[email protected] -- @ is not alphanumeric

I'm trying to use:

if re.match("^[a-zA-Z0-9_.-]+$", username) == True:

But that doesn't seem to do the job...

Answer

Mark Rushakoff picture Mark Rushakoff · Mar 25, 2010

re.match does not return a boolean; it returns a MatchObject on a match, or None on a non-match.

>>> 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

So, you shouldn't do re.match(...) == True; rather, you should be checking re.match(...) is not None in this case, which can be further shortened to just if re.match(...).