字母数字字符的django表单字段正则表达式验证

django form field regex validation for alphanumeric characters

我有一个 django 表单,其中包含一个密码字段,我想验证该字段是否必须包含字母和数字的组合。

class AuthorizationForm(forms.Form):
    email = forms.CharField()
    password = forms.CharField(min_length=7)

我正在这样验证密码字段:

def clean_password(self):
    password = self.cleaned_data['password']
    if not re.match(r'^[A-Za-z0-9]+$', password):
        raise forms.ValidationError("Password should be a combination of Alphabets and Numbers")

这段代码对我不起作用,它允许 abcdefghij123456789abcd123456,而我只想允许 abcd123456

正则表达式并不是必需的,您可以简单地使用字符串函数来执行此操作:

import string

def validate(password):
    letters = set(string.ascii_letters)
    digits = set(string.digits)
    pwd = set(password)
    return not (pwd.isdisjoint(letters) or pwd.isdisjoint(digits))

print(validate('123123'))    # False
print(validate('asdfsdf'))   # False
print(validate('12312sfdf')) # True

您可以使用 RegexValidator,即 django builtin validator

试试下面的代码:

from django.core.validators import RegexValidator

class AuthorizationForm(forms.Form):
    email = forms.CharField()
    password = forms.CharField(
        min_length=7,
        validators=[
            RegexValidator(
                '^(\w+\d+|\d+\w+)+$',
                message="Password should be a combination of Alphabets and Numbers"
            )
        ]
    )