7

調べてみたところ、必要なものが見つかりませんでしたが、単純なはずだと思います(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:

しかし、それは仕事をしていないようです...

4

6 に答える 6

19

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(...)

于 2010-03-25T21:56:22.633 に答える
5

== Trueまたは== Falseを比較で使用しないでください。多くの型には、代わりに使用する必要がある同等の bool が既にあります。

if re.match("^[a-zA-Z0-9_.-]+$", username):
于 2010-03-25T21:57:13.257 に答える
2

次のように少し短くすることもできます。

if re.match(r'^[\w.-]+$', username):
于 2010-03-26T07:28:03.423 に答える
0

utilsクラスでこの方法で検証を行います。

def valid_re(self, s, r):
 reg = re.compile(r)
 return reg.match(s)

次に、utilsインスタンスを呼び出し、次のように確認します。

if not utils.valid_re(username, r'^[a-zA-Z0-9_.-]+$'):
        error = "Invalid username!"
于 2013-02-28T01:39:12.750 に答える
0

多くの正規表現を使用する場合は、速度 (または読みやすさ) のためにコンパイルできます。

import re 
ALPHANUM=re.compile('^[a-zA-Z0-9_.-]+$')

for u in users:
    if ALPHANUM.match(u) is None:
        print "invalid"

ドキュメントから:

最新のパターンのコンパイル済みバージョンが に渡されるかre.match()、キャッシュされるため、一度に少数の正規表現のみを使用するプログラムは、正規表現のコンパイルについて心配する必要はありません。re.search()re.compile()

于 2010-03-26T07:37:45.783 に答える