function validateForm(form, patterns) {
const errors = {};
for (const fieldName in form) {
const fieldValue = form[fieldName];
const pattern = patterns[fieldName];
if (pattern) {
const validationResult = validateField(fieldValue, pattern);
if (validationResult.error) {
errors[fieldName] = validationResult.error;
}
}
}
return errors;
}
function validateField(value, pattern) {
try {
const regex = new RegExp(pattern);
if (!regex.test(value)) {
return { error: pattern }; // Return the pattern as the error message
}
// Additional validation logic, e.g., length constraints
if (pattern.includes("min=") && value.length < parseInt(pattern.substring(pattern.indexOf("min=") + 4))) {
return { error: "Minimum length not met." };
}
if (pattern.includes("max=") && value.length > parseInt(pattern.substring(pattern.indexOf("max=") + 4))) {
return { error: "Maximum length exceeded." };
}
return { success: true }; // Return success object if validation passes.
} catch (error) {
return { error: "Invalid pattern." }; // Handle invalid regex patterns
}
}
// Example Usage:
// Define your patterns
const fieldPatterns = {
name: /^[a-zA-Z\s]+$/, // Letters and spaces only
email: /^[^\s@]+@[^\s@]+\.[^\s@]+$/, // Basic email format
age: /^\d+$/, // Only digits
zipCode: /^\d{5}(?:[-\s]\d{4})?$/, // US zip code format
password: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+])[A-Za-z\d!@#$%^&*()_+]{8,}$/, // Strong password
};
// Example Form Data
const formData = {
name: "John Doe",
email: "john.doe@example.com",
age: "30",
zipCode: "12345",
password: "StrongP@sswOrd"
};
// Validate the form
const validationErrors = validateForm(formData, fieldPatterns);
// Display the errors
if (Object.keys(validationErrors).length > 0) {
console.log("Validation Errors:");
for (const field in validationErrors) {
console.log(`${field}: ${validationErrors[field]}`);
}
} else {
console.log("Form is valid.");
}
Add your comment