validate-password-checklist
Version:
A Javascript utility which can add rules to a password and return the status of each validation
68 lines (67 loc) • 2.75 kB
JavaScript
export const validatePasswordChecklist = (password, messages, options) => {
// -------------- default options -------------- //
const passwordMinLength = (options === null || options === void 0 ? void 0 : options.minLength) || 8;
const allowedSpecialChar = (options === null || options === void 0 ? void 0 : options.allowedSpecialChar) || "!@#$%^&*(),.?\":{}|<>\\[\\]\\\\/`~;'_+=-";
// ----------- default error messages ---------- //
const { minLength = `Must be at least ${passwordMinLength} characters`, lowerCase = 'Must contain at least one lowercase letter', upperCase = 'Must contain at least one uppercase letter', number = 'Must contain at least one number', specialCharacters = 'Must contain at least one special character' } = messages || {};
if (!password)
return { allChecksPassed: false, validationMessages: [] };
/**
* all criteria checks
*/
const checks = [
// password length
{
passed: password.length >= passwordMinLength,
key: 'minLength'
},
// password has lowercase
{
passed: /[a-z]/.test(password),
key: 'lowerCase'
},
// password has uppercase
{
passed: /[A-Z]/.test(password),
key: 'upperCase'
},
// password has number
{
passed: /\d/.test(password),
key: 'number'
},
];
const validationMessages = {
minLength: { passed: false, message: minLength },
lowerCase: { passed: false, message: lowerCase },
upperCase: { passed: false, message: upperCase },
number: { passed: false, message: number },
};
// password has special character
if (allowedSpecialChar) {
checks.push({
passed: new RegExp(`[${allowedSpecialChar}]`).test(password),
key: "specialCharacters",
});
validationMessages.specialCharacters = { passed: false, message: specialCharacters };
}
let allChecksPassed = false;
checks.forEach((check) => {
if (validationMessages[check.key]) {
// check if the password passes the criteria
if (check.passed) {
validationMessages[check.key] = {
...validationMessages[check.key],
passed: true,
key: check.key
};
allChecksPassed = true;
}
else {
validationMessages[check.key] = { ...validationMessages[check.key], key: check.key };
allChecksPassed = false;
}
}
});
return { validationMessages: Object.values(validationMessages), allChecksPassed };
};