const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
const PASSWORD_MIN_LENGTH = 8;
export function validateEmail(email) {
if (!email || typeof email !== 'string') {
return false;
}
return EMAIL_REGEX.test(email.trim());
}
export function validatePassword(password) {
if (!password || typeof password !== 'string') {
return { valid: false, errors: ['Password is required'] };
}
const errors = [];
if (password.length < PASSWORD_MIN_LENGTH) {
errors.push(`Password must be at least ${PASSWORD_MIN_LENGTH} characters`);
}
if (!/[A-Z]/.test(password)) {
errors.push('Password must contain at least one uppercase letter');
}
if (!/[a-z]/.test(password)) {
errors.push('Password must contain at least one lowercase letter');
}
if (!/[0-9]/.test(password)) {
errors.push('Password must contain at least one number');
}
return {
valid: errors.length === 0,
errors,
};
}
export function validateRequired(value, fieldName) {
if (value === null || value === undefined || value === '') {
return { valid: false, error: `${fieldName} is required` };
}
return { valid: true, error: null };
}
export function validateLength(value, { min, max }, fieldName) {
const length = String(value).length;
if (min !== undefined && length < min) {
return { valid: false, error: `${fieldName} must be at least ${min} characters` };
}
if (max !== undefined && length > max) {
return { valid: false, error: `${fieldName} must be at most ${max} characters` };
}
return { valid: true, error: null };
}