在写JS代码时候,经常会遇到验证用户输入的情形, 下面代码是我现在项目中需要验证用户更改新密码。
新密码规则:
- 密码长度[8, 128),
- 新密码不能和老密码相同,
- 必须包含数字和字母
- 必须包含至少一个小写字母,
- 必须包含至少一个大写字母,
- 至少有两个数字,
- 不能有非法字符(<>{}|\^`:)
const FORBIDDEN_CHARACTERS = "<>{}|\\^`:";
const LOCAL_USER_PASSWORD_MIN_LENGTH = 8;
const LOCAL_USER_PASSWORD_MAX_LENGTH = 128;
function newPasswordIsValid(newPassword) {
if (newPassword.length >= LOCAL_USER_PASSWORD_MIN_LENGTH &&
newPassword.length < LOCAL_USER_PASSWORD_MAX_LENGTH &&
newPassword !== $("#applicationLoginUsername").val() &&
isAlphaNumeric(newPassword) &&
hasOneUpperAndOneLowerCaseCharacter(newPassword) &&
hasAtleastTwoDigits(newPassword) &&
!hasTwoSameConsecutiveCharacters(newPassword) &&
!hasInvalidCharacters(newPassword)) {
return true;
}
return false;
}
let isAlphaNumeric = function(string) {
return /^[0-9a-zA-Z]+$/.test(string);
};
let hasOneUpperAndOneLowerCaseCharacter = function(string) {
return /(.*[A-Z]+.*)/.test(string) && /(.*[a-z]+.*)/.test(string);
};
let hasAtleastTwoDigits = function(string) {
return /(.*\d.*\d)/.test(string);
};
let hasTwoSameConsecutiveCharacters = function(string) {
for (var i = 1; i < string.length; ++i) {
if (string[i] === string[i - 1])
return true;
}
return false;
};
let hasInvalidCharacters = function(string) {
for (var i = 1; i < string.length; ++i) {
const asciiCode = string[i].charCodeAt(0);
if (asciiCode >= 0 && asciiCode <= 20) {
return true;
}
if (asciiCode === 127) {
return true;
}
if (FORBIDDEN_CHARACTERS.includes(string[i]) {
return true;
}
}
return false;
};