UNPKG

password-chacker-xqwe

Version:

A simple password strength checker with basic and advanced validation

89 lines (79 loc) 2.6 kB
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}` } }