密碼策略要求
- 8-16 位字符。
- 至少一個大寫、一個小寫、一個數字。
- 不含 3 位以上相同字符連續(如
aaa、1111)。
- 不含 3 位以上連續遞增/遞減字符(如
123、abc)。
- 不包含用戶名。
完整驗證函數
function validatePassword(psd, user) {
if (psd.length < 8 || psd.length > 16) {
alert("長度必須 8-16 位"); return false;
}
if (psd.includes(user)) {
alert("不能包含用戶名"); return false;
}
if (!/[a-z]/.test(psd)) { alert("需含小寫字母"); return false; }
if (!/[A-Z]/.test(psd)) { alert("需含大寫字母"); return false; }
if (!/[0-9]/.test(psd)) { alert("需含數字"); return false; }
// 連續數字/字母檢查(簡化版,可擴展完整序列)
if (/012|123|234|345|456|567|678|789|abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz/i.test(psd)) {
alert("不能包含 3 位連續字符"); return false;
}
// 重複字符檢查
for (let i = 0; i < psd.length - 2; i++) {
if (psd[i] === psd[i+1] && psd[i] === psd[i+2]) {
alert("不能包含 3 位相同字符"); return false;
}
}
return true;
}
優化建議
- 連續字符正則可預編譯完整序列庫,或使用字符碼差值判斷通用邏輯。
- 生產環境建議後端同步驗證,前端僅作即時提示。
- 可集成
zxcvbn 庫評估熵值,提供更科學的強度分級。