check-password-strength
Version:
A NPM Password strength checker based from Javascript RegExp. Check passphrase if it's "Too weak", "Weak", "Medium" or "Strong"
84 lines (70 loc) • 1.79 kB
JavaScript
import escapeStringRegexp from 'escape-string-regexp';
const defaultOptions = [
{
id: 0,
value: "Too weak",
minDiversity: 0,
minLength: 0,
},
{
id: 1,
value: "Weak",
minDiversity: 2,
minLength: 8,
},
{
id: 2,
value: "Medium",
minDiversity: 4,
minLength: 10,
},
{
id: 3,
value: "Strong",
minDiversity: 4,
minLength: 12,
},
];
const owaspSymbols = "!\"#$%&'()*+,-./\\:;<=>?@[]^_`{|}~";
const passwordStrength = (
password,
options = defaultOptions,
restrictSymbolsTo
) => {
options[0].minDiversity = 0;
options[0].minLength = 0;
// prevent [a-z] to match null and compute length
const _password = password ?? "";
const rules = [
{
key: "lowercase",
regex: "[a-z]",
},
{
key: "uppercase",
regex: "[A-Z]",
},
{
key: "number",
regex: "[0-9]",
},
{
key: "symbol",
regex: restrictSymbolsTo ? `[${escapeStringRegexp(restrictSymbolsTo)}]` : "[^a-zA-Z0-9]",
},
];
let strength = {};
strength.contains = rules
.filter((rule) => new RegExp(`${rule.regex}`).test(_password))
.map((rule) => rule.key);
strength.length = _password.length;
let fulfilledOptions = options
.filter((option) => strength.contains.length >= option.minDiversity)
.filter((option) => strength.length >= option.minLength)
.sort((o1, o2) => o2.id - o1.id)
.map((option) => ({ id: option.id, value: option.value }));
Object.assign(strength, fulfilledOptions[0]);
return strength;
};
var index = { passwordStrength, defaultOptions, owaspSymbols };
export { index as default, defaultOptions, owaspSymbols, passwordStrength };