簡體   English   中英

Python3,與列表重新匹配

[英]Python3, re.match with list

我讀了這個: https : //stackoverflow.com/a/17090205/6426449

我列出了無法在django中的用戶名上使用的列表。

列表FORBIDDEN_USERNAME_LIST = ['admin', 'master', 'owner']

所以我做了這樣的代碼:

views.py

def username_choice(request):

    if request.method == "POST":
        username = request.POST['username']    
        for item in forbidden.FORBIDDEN_USERNAME_LIST:
            match = re.search("r'\b"+item+"\b'", username)
            if match:
                return JsonResponse({'result': item + 'banned username'})

但是看來這行不通。

也許我認為, match = re.search("r'\\b"+item+"\\b'", username)這是問題。

我該如何解決?

您可以簡單地in使用:

forbidden = ['admin', 'master', 'owner']
username = request.POST['username']
match = [nm for nm in forbidden if nm in username]
if match:
    # part of the username is in the forbidden list.

IPython中的示例:

In [1]: forbidden = ['admin', 'master', 'owner']

In [2]: username = 'owner123'

In [3]: match = [nm for nm in forbidden if nm in username]

In [4]: match
Out[4]: ['owner']
def username_choice(request):

    if request.method == "POST":
        username = request.POST['username']    
        for item in forbidden.FORBIDDEN_USERNAME_LIST:
          if re.search(r'\b'+str(item)+'\\b', username, re.I):
              return JsonResponse({'result': item + 'banned username'})

只需使用以下語句:

match = re.search(r'[%s]+' % item, username, re.I)

代替這個:

match = re.search("r'\b"+item+"\b'", username)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM