先來說一下這個問題:如何驗證密碼的安全級別。例如:小於6個字符的密碼不許保存,當字符數大於等於6的時候,如果含有數字、小寫字母、大寫字母、特殊字符中的一種時為低安全級別,含有兩種或三種的時候為中安全級別,含有四種的時候為高安全界別。
接下來我用兩種方法去實現這個問題:
第一種方法:遍歷password字符串中所有的字符,根據字符的ASCII 碼判斷字符串中都有哪幾種字符,並且用一個數組的不同位表示是否含有某種字符。
function AnalyzePasswordSecurityLevel(password) { var pwdArray = new Array(); var securityLevelFlag = 0; if (password.length < 6) { return 0; } else { var securityLevelFlagArray = new Array(0, 0, 0, 0); for (var i = 0; i < password.length; i++) { var asciiNumber = password.substr(i, 1).charCodeAt(); if (asciiNumber >= 48 && asciiNumber <= 57) { securityLevelFlagArray[0] = 1; //digital } else if (asciiNumber >= 97 && asciiNumber <= 122) { securityLevelFlagArray[1] = 1; //lowercase } else if (asciiNumber >= 65 && asciiNumber <= 90) { securityLevelFlagArray[2] = 1; //uppercase } else { securityLevelFlagArray[3] = 1; //specialcase } } for (var i = 0; i < securityLevelFlagArray.length; i++) { if (securityLevelFlagArray[i] == 1) { securityLevelFlag++; } } return securityLevelFlag; } }
這里的securityLevelFlag等於幾就代表字符串中含有幾種字符。
第二種方法:用正則表達式去判斷密碼中都包含了哪幾種字符
function AnalyzePasswordSecurityLevel(password) { var securityLevelFlag = 0; if (password.length < 6) { return 0; } else { if (/[a-z]/.test(password)){ securityLevelFlag++; //lowercase } if (/[A-Z]/.test(password)){ securityLevelFlag++; //uppercase } if(/[0-9]/.test(password)){ securityLevelFlag++; //digital } if(containSpecialChar(password)){ securityLevelFlag++; //specialcase } return securityLevelFlag; } } function containSpecialChar(str) { var containSpecial = RegExp(/[(\ )(\~)(\!)(\@)(\#)(\$)(\%)(\^)(\&)(\*)(\()(\))(\-)(\_)(\+)(\=)(\[)(\])(\{)(\})(\|)(\\)(\;)(\:)(\')(\")(\,)(\.)(\/)(\<)(\>)(\?)(\)]+/); return (containSpecial.test(str)); }