File: //home/arjun/projects/unlimited-leads/Unlimited-Leads-Be/utils/validators.py
import re
import phonenumbers
from rest_framework.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _
def validate_password_strength(value):
conditions = [
len(value) >= 8, # Minimum length 8
re.search(r"[A-Z]", value), # At least one uppercase letter
re.search(r"[a-z]", value), # At least one lowercase letter
re.search(r"\d", value), # At least one digit
re.search(r'[!@#$%^&*(),.?":{}|<>]', value), # At least one special character
]
if not all(conditions):
raise ValidationError(
"Password must contain at least 8 characters, including an uppercase letter, a lowercase letter, a digit, and a special character."
)
def validate_phone_number(value):
try:
phone_number = phonenumbers.parse(value, None)
if not phonenumbers.is_valid_number(phone_number):
raise ValidationError(_("Invalid phone number format."))
except phonenumbers.phonenumberutil.NumberParseException:
raise ValidationError(_("Invalid phone number format."))
def validate_otp(value):
if re.match(r"\d{6}", value) is None:
raise ValidationError("Enter valid otp")
def validate_name(value):
name = str(value).strip()
if len(name) < 1 or len(name) > 100:
raise ValidationError("must be between 1 and 100 characters long.")
if not re.match(r"^[A-Za-z0-9 \-_]+$", name):
raise ValidationError(
"It can only contain letters, numbers, spaces, and hyphens."
)
return name