[英]Password Strength Meter
我正在嘗試創建自己的 JS 密碼強度計。
它以前可以工作,但我不喜歡它的工作方式,所以我嘗試使用
{score +=10;}
多個問題:
對於第一個問題,在jsFiddle中,還必須確保在全局范圍內定義了密碼處理功能。 jsFiddle的設置方式不是(在onload處理程序中)。 您可以通過將jsFiddle中的第一個下拉菜單設置為“ no wrap(head)”來解決此問題。
對於第二個問題,您正在使用:
ratingMsg[score]
但是,您的數組是一個稀疏數組,不能保證為大多數可能的分數提供一個條目。 您根本無法那樣做,因為您訪問的許多元素將具有未定義的值,不會給您有意義的消息。 例如,如果得分為15,則您將訪問ratingMsg [15],但是數組中該空間中沒有任何值,因此您不會收到有意義的評級消息。
解決方案是找到另一種選擇正確消息的方法。 最簡單的方法是if / else if / else if語句,該語句將檢查分數在哪個范圍內並設置適當的msg。 表驅動方式有更優雅的方式,但是所有方式都涉及通過數據結構進行搜索以找到當前得分介於哪個值和使用該味精。
如果您查看此jsFiddle http://jsfiddle.net/jfriend00/dA7XC/ ,則會看到您的代碼正在被調用,但有時只會在數組中命中值。
而且,這是一個重寫的算法,無論該小提琴中顯示的分數如何,都可以找到適當的味精: http : //jsfiddle.net/jfriend00/jYcBT/ 。
它使用如下數據結構:
var ratingMsg = [
0, "Unclassified",
10, "Weak",
20, "Fair",
50, "Better",
60, "Medium",
70, "Good",
90, "Strong"
];
和這樣的for循環以獲得適當的等級
for (var i = ratingMsg.length - 2 ; i >= 0; i-=2) {
if (score >= ratingMsg[i]) {
msg = ratingMsg[i+1];
break;
}
}
在這里,您可以前往: http : //jsfiddle.net/RSq4L/11/
第一個問題是在您的小提琴中設置了onLoad
選項,因此您的passwordStrength
函數實際上並未在全局范圍內聲明。 它在jsFiddle用來包裝您的代碼的onLoad
塊內聲明。 當按鍵處理程序嘗試調用該函數時,這將導致頁面錯誤。
您可以通過幾種不同的方式解決此問題:
onLoad
。 onkeydown
屬性進行設置。 第二個問題是如何鍵入分數消息。 你有:
var ratingMsg = new Array(0);
ratingMsg[0] = "Unclassified";
ratingMsg[10] = "Weak";
ratingMsg[30] = "Fair";
ratingMsg[50] = "Better";
ratingMsg[60] = "Medium";
ratingMsg[70] = "Good";
ratingMsg[90] = "Strong";
...然后您通過執行ratingMsg[score]
查找消息。 僅當分數與您的索引之一完全匹配時 ,此方法才有效。 而且根據您的數學情況,情況並非總是如此。
我建議做這樣的事情:
ratingMsg = {};
ratingMsg[0] = "Unclassified";
ratingMsg[10] = "Weak";
ratingMsg[30] = "Fair";
ratingMsg[50] = "Better";
ratingMsg[60] = "Medium";
ratingMsg[70] = "Good";
ratingMsg[90] = "Strong";
function closestRating(score) {
var bestKey = 0;
var bestMatch = 100;
for (var key in ratingMsg) {
if (key <= score && score - key < bestMatch) {
bestMatch = score - key;
bestKey = key;
}
}
return ratingMsg[bestKey];
}
毫無關系,您確定要使用onkeydown
嗎? 我認為onkeyup
會更好。
您的提琴手腳本有幾個錯誤。 這是更正的一個: 新腳本 。
我只是為它寫了這個:用於密碼強度強制的 Jquery 插件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.