from django import forms import re class ChangePasswordForm(forms.Form): new_password = forms.CharField(widget=forms.PasswordInput) new_password_again = forms.CharField(widget=forms.PasswordInput) def clean(self): ''' Validate the password submitted. ''' cleaned_data = self.cleaned_data # The two submitted strings need to match. new_password = cleaned_data.get('new_password') new_password_again = cleaned_data.get('new_password_again') if new_password != new_password_again: raise forms.ValidationError('The typed passwords do not \ match.') # Check that the length is at least 10 characters. if not len(new_password) >= 10: raise forms.ValidationError('Your password needs to be at \ least 10 characters long. Currently %d characters.' % len(new_password)) # The password needs to contain at least one upper and one lower case # letter and three numbers or special characters. if not re.search('[a-z]', new_password) or not re.search( '[A-Z]', new_password): raise forms.ValidationError('You need at least one upper \ case letter and one lower case letter in your password.') numbers = re.findall('\d', new_password) specials = re.findall('[,.\[\]!@#$%^&*?_\(\)-]', new_password) if (len(numbers)+len(specials)) < 3: raise forms.ValidationError('You need at least three numbers or \ special characters i.e. 1234567890,.][!@#$%^&*?_()-') return cleaned_data