import re
class FormFieldValidator:
def __init__(self, field_name, field_type, validation_rules, retry_attempts=3):
self.field_name = field_name
self.field_type = field_type # e.g., 'text', 'email', 'number'
self.validation_rules = validation_rules # Dictionary of rules (e.g., {'required': True, 'min_length': 5})
self.retry_attempts = retry_attempts
def validate(self, value):
attempts = 0
while attempts < self.retry_attempts:
try:
if not value:
if self.validation_rules.get('required', False):
raise ValueError(f"{self.field_name} is required.")
if self.field_type == 'email':
if not re.match(r"[^@]+@[^@]+\.[^@]+", value):
raise ValueError(f"{self.field_name} is not a valid email address.")
if self.validation_rules.get('min_length') and len(value) < self.validation_rules['min_length']:
raise ValueError(f"{self.field_name} must be at least {self.validation_rules['min_length']} characters long.")
if self.validation_rules.get('max_length') and len(value) > self.validation_rules['max_length']:
raise ValueError(f"{self.field_name} must be no more than {self.validation_rules['max_length']} characters long.")
# Add more validation rules here as needed
return value # Validation successful
except ValueError as e:
attempts += 1
if attempts < self.retry_attempts:
print(f"Validation failed for {self.field_name}. Attempt {attempts}/{self.retry_attempts}. Retrying...")
else:
raise ValueError(f"Validation failed for {self.field_name} after {self.retry_attempts} attempts: {e}")
raise ValueError(f"Validation failed for {self.field_name} after {self.retry_attempts} attempts.")
if __name__ == '__main__':
# Example Usage
email_validator = FormFieldValidator(
field_name="email",
field_type="email",
validation_rules={'required': True, 'min_length': 5},
retry_attempts=2
)
try:
validated_email = email_validator.validate("test@example.com")
print(f"Valid email: {validated_email}")
except ValueError as e:
print(f"Error: {e}")
try:
validated_email = email_validator.validate("test")
print(f"Valid email: {validated_email}")
except ValueError as e:
print(f"Error: {e}")
Add your comment