1

ユーザーが名前に英数字、アンダースコア、およびスペースを入力できるようにしようとしています。if not re.search(r'^[\w-]+$', name):名前に英数字、アンダースコア、スペース以外が含まれているかどうかを確認するために使用しています。ただし、ここでは、複数ではなく、1 つの単語しか入力できません。私は何を間違っていますか?

4

3 に答える 3

6

あなたは明らかに間違ったことをしていません。あなたの質問も完全に明確ではないので、考えられるいくつかの問題に対処しようと思います。

正規表現で受け入れられる単語が 1 つだけなのはなぜですか?

あなたの正規表現には、ドキュメンテーション\wによると、英数字とアンダースコアだけの があります。含まれていないのはスペース文字であるため、スペースを含む名前 (名と姓を区切っている場合を含む) は正規表現と一致するため、. 英数字以外の文字/アンダースコア/スペースがあるかどうかを確認するには、次のことを行う必要があります。reFalsenot

if not re.search(r'^[\w- ]+$', name):

または、何らかの理由で改行 ( \n) またはタブ ( \t) やその他の種類の空白についても懸念がある場合:

if not re.search(r'^[\w\s- ]+$', name):

一度に 1 つの名前しか確認できないのはなぜですか?

これは、正規表現が一度に 1 つの文字列しか検索しないためです。複数の名前をチェックする場合は、次のような形式で各名前に対して正規表現を実行する必要があります。

# assuming name_list is a list of name strings
for name in name_list:
    if not re.search(r'^[\w- ]+$', name):
        # do whatever
于 2012-12-30T06:45:22.910 に答える
2

正規表現ではスペースを使用できません(代わりに、質問で言及しなかったダッシュを使用できます)。

if not re.search(r'^[\w ]+$', name):

ASCII 文字、数字、アンダースコア、スペースのみを使用できます (少なくとも 1 文字は必要です)。

于 2012-12-30T06:52:13.930 に答える
0

正規表現について少し学ぶ必要があります。

私は個人的にGoogle クラスから始めましたが、ドキュメントを読むだけで十分でした。

于 2012-12-30T15:12:59.030 に答える