UNPKG

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
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 }; };