【问题标题】:django form field regex validation for alphanumeric characters [duplicate]django表单字段正则表达式验证字母数字字符[重复]
【发布时间】:2025-12-20 03:15:09
【问题描述】:

我有一个 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

【问题讨论】:

    标签: python django django-forms


    【解决方案1】:

    您可以使用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")])
    

    【讨论】:

    • 这如何回答这个问题?问题在于正则表达式,而不是它的调用方式。
    • 通过这种方式解决了这个问题,并且regex技术以不同的方式使用。这种方式是原始@MHS方式的最高标准,是pythonic方式。
    【解决方案2】:

    Regex 不是必需的,你可以简单地使用字符串函数来做到这一点:

    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
    

    【讨论】:

      最近更新 更多