1. import re
  2. class FormFieldValidator:
  3. def __init__(self, field_name, field_type, validation_rules, retry_attempts=3):
  4. self.field_name = field_name
  5. self.field_type = field_type # e.g., 'text', 'email', 'number'
  6. self.validation_rules = validation_rules # Dictionary of rules (e.g., {'required': True, 'min_length': 5})
  7. self.retry_attempts = retry_attempts
  8. def validate(self, value):
  9. attempts = 0
  10. while attempts < self.retry_attempts:
  11. try:
  12. if not value:
  13. if self.validation_rules.get('required', False):
  14. raise ValueError(f"{self.field_name} is required.")
  15. if self.field_type == 'email':
  16. if not re.match(r"[^@]+@[^@]+\.[^@]+", value):
  17. raise ValueError(f"{self.field_name} is not a valid email address.")
  18. if self.validation_rules.get('min_length') and len(value) < self.validation_rules['min_length']:
  19. raise ValueError(f"{self.field_name} must be at least {self.validation_rules['min_length']} characters long.")
  20. if self.validation_rules.get('max_length') and len(value) > self.validation_rules['max_length']:
  21. raise ValueError(f"{self.field_name} must be no more than {self.validation_rules['max_length']} characters long.")
  22. # Add more validation rules here as needed
  23. return value # Validation successful
  24. except ValueError as e:
  25. attempts += 1
  26. if attempts < self.retry_attempts:
  27. print(f"Validation failed for {self.field_name}. Attempt {attempts}/{self.retry_attempts}. Retrying...")
  28. else:
  29. raise ValueError(f"Validation failed for {self.field_name} after {self.retry_attempts} attempts: {e}")
  30. raise ValueError(f"Validation failed for {self.field_name} after {self.retry_attempts} attempts.")
  31. if __name__ == '__main__':
  32. # Example Usage
  33. email_validator = FormFieldValidator(
  34. field_name="email",
  35. field_type="email",
  36. validation_rules={'required': True, 'min_length': 5},
  37. retry_attempts=2
  38. )
  39. try:
  40. validated_email = email_validator.validate("test@example.com")
  41. print(f"Valid email: {validated_email}")
  42. except ValueError as e:
  43. print(f"Error: {e}")
  44. try:
  45. validated_email = email_validator.validate("test")
  46. print(f"Valid email: {validated_email}")
  47. except ValueError as e:
  48. print(f"Error: {e}")

Add your comment