【问题标题】:Python3, re.match with listPython3,与列表重新匹配
【发布时间】:2018-06-07 22:54:27
【问题描述】:

我读到这个: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) 这里有问题。

我该如何解决这个问题?

【问题讨论】:

  • 你是如何从前端输入用户名的?
  • 你最好在表单验证中检查这个东西。

标签: python django


【解决方案1】:

只需使用以下语句:

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

而不是这个:

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

【讨论】:

    【解决方案2】:

    你可以简单地使用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']
    

    【讨论】:

    • 我喜欢这种方法不使用正则表达式。
    【解决方案3】:
    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'})
    

    【讨论】:

    • 感谢 Exprator,但如果 username = admin123 怎么办?我还想禁止所有用户名与任何禁止用户名列表。
    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 2012-02-28
    • 1970-01-01
    • 2014-09-04
    • 2021-02-22
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多