How can I make a Django form field contain only alphanumeric characters
Question:
I have this model
name = models.CharField(max_length=50, blank=True, null=True)
email = models.EmailField(max_length=50, unique=True)
I want that the user should not be able to use any other characters than alphanumerics in both fields.
Is there any way?
Answers:
You would use a validator to limit what the field accepts. A RegexValidator
would do the trick here:
from django.core.validators import RegexValidator
alphanumeric = RegexValidator(r'^[0-9a-zA-Z]*$', 'Only alphanumeric characters are allowed.')
name = models.CharField(max_length=50, blank=True, null=True, validators=[alphanumeric])
email = models.EmailField(max_length=50, unique=True, validators=[alphanumeric])
Note that there already is a validate_email
validator that’ll validate email addresses for you; the alphanumeric
validator above will not allow for valid email addresses.
Instead of RegexValidator, give validation in forms attributes only like…
class StaffDetailsForm(forms.ModelForm):
first_name = forms.CharField(required=True,widget=forms.TextInput(attrs={'class':'form-control' , 'autocomplete': 'off','pattern':'[A-Za-z ]+', 'title':'Enter Characters Only '}))
and so on…
Else you will have to handle the error in views.
It worked for me try this simple method…
This will allow users to enter only Alphabets and Spaces only
That is little bit wider than you want, but you also can use SlugField
:
A Slug is basically a short label for something, containing only
letters, numbers, underscores or hyphens. They’re generally used in
URLs. For example, in a typical blog entry URL:
https://www.geeksforgeeks.org/add-the-slug-field-inside-django-model/
field_name = models.SlugField(max_length=200, **options)
email validation using django form
with danish special characters also
import re
email_regex = r'b[A-Za-z0-9._%+-øØæÆåÅ]+@[A-Za-z0-9.-øØæÆåÅ]+.[A-Z|a-z]{2,}b'
if email and not re.search(email_regex, email):
raise forms.ValidationError({"email": "Enter a valid email"})
You can make use of builtin string isalnum function to check whether input is alphanumeric or not.
def alphanumeric(value):
if not str(value).isalnum():
raise ValueError("Name can have number or character no special characters")
name = models.CharField(max_length=100, blank=True, null=True, validators=[alphanumeric])
I have this model
name = models.CharField(max_length=50, blank=True, null=True)
email = models.EmailField(max_length=50, unique=True)
I want that the user should not be able to use any other characters than alphanumerics in both fields.
Is there any way?
You would use a validator to limit what the field accepts. A RegexValidator
would do the trick here:
from django.core.validators import RegexValidator
alphanumeric = RegexValidator(r'^[0-9a-zA-Z]*$', 'Only alphanumeric characters are allowed.')
name = models.CharField(max_length=50, blank=True, null=True, validators=[alphanumeric])
email = models.EmailField(max_length=50, unique=True, validators=[alphanumeric])
Note that there already is a validate_email
validator that’ll validate email addresses for you; the alphanumeric
validator above will not allow for valid email addresses.
Instead of RegexValidator, give validation in forms attributes only like…
class StaffDetailsForm(forms.ModelForm):
first_name = forms.CharField(required=True,widget=forms.TextInput(attrs={'class':'form-control' , 'autocomplete': 'off','pattern':'[A-Za-z ]+', 'title':'Enter Characters Only '}))
and so on…
Else you will have to handle the error in views.
It worked for me try this simple method…
This will allow users to enter only Alphabets and Spaces only
That is little bit wider than you want, but you also can use SlugField
:
A Slug is basically a short label for something, containing only
letters, numbers, underscores or hyphens. They’re generally used in
URLs. For example, in a typical blog entry URL:
https://www.geeksforgeeks.org/add-the-slug-field-inside-django-model/
field_name = models.SlugField(max_length=200, **options)
email validation using django form
with danish special characters also
import re
email_regex = r'b[A-Za-z0-9._%+-øØæÆåÅ]+@[A-Za-z0-9.-øØæÆåÅ]+.[A-Z|a-z]{2,}b'
if email and not re.search(email_regex, email):
raise forms.ValidationError({"email": "Enter a valid email"})
You can make use of builtin string isalnum function to check whether input is alphanumeric or not.
def alphanumeric(value):
if not str(value).isalnum():
raise ValueError("Name can have number or character no special characters")
name = models.CharField(max_length=100, blank=True, null=True, validators=[alphanumeric])