password-chacker-xqwe
Version:
A simple password strength checker with basic and advanced validation
89 lines (79 loc) • 2.6 kB
JavaScript
export default function characterValidator(password){
let score = 4;
const message = [
"Add at least one lowercase letters",
"Add at least one uppercase letters",
"Add at least one numbers ",
"Add at least one specials characters"
];
const validate_ch = [false, false, false, false];
const lowercase = (password.match(/[a-z]/g) || []).length;
const uppercase = (password.match(/[A-Z]/g) || []).length;
const numbers = (password.match(/[0-9]/g) || []).length;
const specials = (password.match(/[^a-zA-Z0-9]/g) || []).length;
if(lowercase <= 0 ) {
score -= 1;
} else{
validate_ch[0] = true;
message[0] = "At least one lowercase letter found"
}
if( uppercase <= 0 ){
score -= 1;
} else{
validate_ch[1] = true;
message[1] = "At least one lowercase letter found"
}
if( numbers <= 0 ){
score -= 1;
} else{
validate_ch[2] = true;
message[2] = "At least one lowercase letter found"
}
if( specials <= 0 ){
score -= 1;
} else{
validate_ch[3] = true;
message[3] = "At least one lowercase letter found"
}
return {
"score":score,
"is_valid": validate_ch.every(Boolean),
"uppercase": {
"present": validate_ch[0],
"message": message[0],
"count": uppercase.length
},
"lowercase": {
"present": validate_ch[1],
"message": message[1],
"count": lowercase.length
},
"digits": {
"present": validate_ch[2],
"message": message[2],
"count": numbers.length
},
"special_characters": {
"present": validate_ch[3],
"message": message[3],
"count": specials.length
}
};
}
export function whitespace(password){
const ws = /\s/.test(password);
return {
"is_valid": !ws,
"message": ws ? "whitespace is not allowed" : "No whitespace detected"
}
}
export function repeatingCharacters(password){
const repeatedPatten = password.match(/(.)\1{3,}/g);
return {
"is_valid": repeatedPatten == "",
"score": -1,
"max_repeats_allowed": 3,
"repeated_characters_str": repeatedPatten,
"message": repeatedPatten == "" ? "No excessive repeating characters detected" : `repeating characters detected i.e ${repeatedPatten}`
}
}