52 lines
1.4 KiB
JavaScript
52 lines
1.4 KiB
JavaScript
function validateRequired(value, fieldName) {
|
|
if (!value || value.trim() === '') {
|
|
return `${fieldName} is required`;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function validateUsername(username) {
|
|
if (!username || username.trim() === '') {
|
|
return 'Username is required';
|
|
}
|
|
if (username.length < 3) {
|
|
return 'Username must be at least 3 characters';
|
|
}
|
|
if (username.length > 50) {
|
|
return 'Username must be less than 50 characters';
|
|
}
|
|
if (!/^[a-zA-Z0-9_]+$/.test(username)) {
|
|
return 'Username can only contain letters, numbers, and underscores';
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function validatePassword(password) {
|
|
if (!password || password.trim() === '') {
|
|
return 'Password is required';
|
|
}
|
|
if (password.length < 6) {
|
|
return 'Password must be at least 6 characters';
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function showFieldError(field, error) {
|
|
field.classList.add('error');
|
|
let errorDiv = field.nextElementSibling;
|
|
if (!errorDiv || !errorDiv.classList.contains('field-error')) {
|
|
errorDiv = document.createElement('div');
|
|
errorDiv.className = 'field-error';
|
|
field.parentNode.insertBefore(errorDiv, field.nextSibling);
|
|
}
|
|
errorDiv.textContent = error;
|
|
}
|
|
|
|
function clearFieldError(field) {
|
|
field.classList.remove('error');
|
|
const errorDiv = field.nextElementSibling;
|
|
if (errorDiv && errorDiv.classList.contains('field-error')) {
|
|
errorDiv.remove();
|
|
}
|
|
}
|