先来说一下这个问题:如何验证密码的安全级别。例如:小于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));
}