This code violates DRY by duplicating validation rules for email and password fields. A better approach would be to extract common validation rules:
const validations = {
email: {
required: true,
pattern: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i,
message: 'Invalid email address'
},
password: {
required: true,
minLength: 8,
message: 'Must be at least 8 characters'
}
};
const validateField = (name, value, rules) => {
if (rules.required && !value) return 'Required';
if (rules.pattern && !rules.pattern.test(value)) return rules.message;
if (rules.minLength && value.length < rules.minLength) return rules.message;
return null;
};
const createValidator = (fields) => (values) => {
const errors = {};
Object.keys(fields).forEach(field => {
const error = validateField(field, values[field], validations[field]);
if (error) errors[field] = error;
});
return errors;
};
const validateLoginForm = createValidator(['email', 'password']);
const validateRegistrationForm = (values) => {
const errors = validateLoginForm(values);
if (!values.confirmPassword) {
errors.confirmPassword = 'Required';
} else if (values.confirmPassword !== values.password) {
errors.confirmPassword = 'Passwords must match';
}
return errors;
};