merhaba;
ornek olsun diye npm deki check-password-strength paketini inceleyelim
defaultOptions diye bi objeden olusan bir array olusturmus
const defaultOptions = [
{
id: 0,
value: "Too weak",
minDiversity: 0,
minLength: 0
},
{
id: 1,
value: "Weak",
minDiversity: 2,
minLength: 6
},
{
id: 2,
value: "Medium",
minDiversity: 4,
minLength: 8
},
{
id: 3,
value: "Strong",
minDiversity: 4,
minLength: 10
}
]
const passwordStrength = (password, options = defaultOptions, allowedSymbols="!\"#\$%&'\(\)\*\+,-\./:;<=>\?@\[\\\\\\]\^_`\{|\}~") => {
let passwordCopy = password || ''
options[0].minDiversity = 0,
options[0].minLength = 0
// buyuk, kucuk harf ve numara icin kural olusturmus
const rules = [
{
regex: "[a-z]",
message: 'lowercase'
},
{
regex: '[A-Z]',
message: 'uppercase'
},
{
regex: '[0-9]',
message: 'number'
},
]
// ozel karakterterler icinde bir kural olusturmus
if (allowedSymbols) {
rules.push({
regex: `[${allowedSymbols}]`,
message: 'symbol'
})
}
// strength adinda bos bir obje olusturmus
let strength = {}
strength.contains = rules
// burda kurallari filtrelemis
// regexten gecen kurallar donecek
.filter(rule => new RegExp(`${rule.regex}`).test(passwordCopy))
//filtrelemeden sonra kalan herbir objedeki message yi iceren bir arraya cevirmis
.map(rule => rule.message)
//uppercase ve lowercase den gectigini varsalim strength.contains soyle birsey olacak;
// ["uppercase", "lowercase"]
// strength.length'ide sifrenin uzunluguna esitlemis
strength.length = passwordCopy.length;
let fulfilledOptions = options
// strength.containsin uzunlugu minDiversityden uzun olanlari filtrelemis
.filter(option => strength.contains.length >= option.minDiversity)
// sifre uzunlugu optionstaki uzunluktan buyuk olanlari filtrelemis
.filter(option => strength.length >= option.minLength)
// filtrelemeden kalanseyleri id propertysine gore buyukten kucuge dogru siralamis
.sort((o1, o2) => o2.id - o1.id)
// id ve value disindaki butun propertyleri objeden cikarmis
.map(option => ({id: option.id, value: option.value}))
// yukarda siraladigi arrayin ilk elamnini strength objesi ile birlestirmis
Object.assign(strength, fulfilledOptions[0])
// kalan en buyuk eleman id: 3 olan dersek
// strength.value burada strong gelmesi gerekiyor
return strength;
};